gpt4 book ai didi

java - 为什么Java的基于值的类不应该被序列化?

转载 作者:太空狗 更新时间:2023-10-29 22:34:40 27 4
gpt4 key购买 nike

从版本 8 开始,Java 有了 value-based classes 的概念.这是在准备 future 版本,该版本很可能允许定义 value types .两个定义/描述都提到序列化(我添加的粗体):

关于现有的基于值的类:

A program may produce unpredictable results if it attempts to distinguish two references to equal values of a value-based class, whether directly via reference equality or indirectly via an appeal to synchronization, identity hashing, serialization, or any other identity-sensitive mechanism.

关于 future 的值(value)类型:

The default identity-based hash code for object, available via System.identityHashCode, also does not apply to value types. Internal operations like serialization which make identity-based distinctions of objects would either not apply to values (as they do not apply to primitives) or else they would use the value-based distinction supplied by the value type’s hashCode method.

因为 future 的 JVM 实现可能不会对基于值的类使用对象头和引用指针,所以一些限制是显而易见的。 (例如,不锁定 JVM 不得维护的身份。锁定的引用可以被删除并在以后由另一个替换,这使得释放锁毫无意义,并且会导致死锁)。

但我不明白连载是如何发挥作用的。为什么它被认为是“身份敏感机制”?为什么它“对对象进行基于身份的区分”

最佳答案

序列化使用 System.identityHashCode(通过 IdentityHashMap)确保反序列化产生的对象图的拓扑结构与输入图的拓扑结构等价。

关于java - 为什么Java的基于值的类不应该被序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451590/

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