gpt4 book ai didi

java - java反序列化期间的大量int数组

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:40 25 4
gpt4 key购买 nike

我看到在使用 ObjectInputStream 的 Java 反序列化过程中有大量的 int 数组实例。我知道这是由于创建了依赖项跟踪对象 (java.io.ObjectInputStream$HandleTable$HandleList)。据我了解,它们用于在读取对象时将 ClassNotFoundException 传播到“依赖”对象。

我不明白需要跟踪 ClassNotFoundException 对目标对象的这种依赖性吗?如果发现 ClassNotFoundException,为什么实现不能立即抛出异常?

在我工作的一个 Java 应用程序的反序列化过程中, transient 内存使用量出现了显着的上升。在使用jmap.

我正在尝试确定在遇到 ClassNotFoundException 时是否可以终止反序列化过程。在这种情况下,我想更改 ObjectInputStream 并在 Bootstrap 类路径中使用修改后的类。

我确实意识到 HandleTable 的“条目”绝对需要将任何先前读取的对象连接到稍后从流中读取的依赖对象。澄清一下,问题是关于 java.io.ObjectInputStream$HandleTable$HandleList 的重要性,我无法理解。

非常感谢任何见解。

谢谢,
王公。

最佳答案

它跟踪对象的目的是解决循环引用并确保在序列化之前指向同一对象 C 的两个对象 A 和 B 在之后不指向 C 的两个单独实例 反序列化。 没有跟踪引用,当 A 的对象层次结构被反序列化时,它将创建 C 的实例,然后在反序列化 B 对象层次结构时,它将创建另一个单独的 C 实例。它与ClassNotFoundException。

最好的办法是在完成反序列化一个对象“图”后立即丢弃 ObjectInputStreams,而不是将其重新用于多个对象。

关于java - java反序列化期间的大量int数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20096186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com