我们不能只获取要序列化的对象的 RAM 内存转储吗?
Can't we just take RAM memory dump of object to be serialized?
当我们必须将对象保存在持久性存储中或通过网络传输时,我们将对象序列化(在这种情况下,对象应实现可序列化接口)。我的问题是为什么有对象 class 应该实现可序列化接口的限制。我们不能通过按原样获取内存转储来序列化任何随机对象吗?
My question is why there is the restriction that the object class should implement serializable interface.
因为某些类型的 object 在 HotSpot JVM 中根本无法序列化。 class 的实例,例如 Thread
、Process
、Socket
和 Class
。 (在某些情况下,序列化是可以想象的,但不切实际。对于其他情况,这是不可想象的,因为 object 的行为取决于 Java 无法访问的状态。)
Can't we serialize any random object by taking its memory dump as it is.
有几个原因 spring 需要注意(假设我们正在讨论基于 HotSpot 的 JVM)。
- 上述 classes 的实例无法以这种方式正确序列化。
- 如果复制内存快照,则必须将其复制到目标地址中的相同地址space。否则指针将被破坏。
- 每个 object 都有一个 object header,其中包括对 object 的 class 的特殊引用。参考文献可能不同。
- 要复制包含 objects 的内存块,您需要在发送端和接收端以及所有其他应用程序线程禁用 GC。这将是一个停止世界的事件......在两端。
- 您要复制的 object不太可能分配在同一内存块中。
上面的一些问题可以用完全不同的 JVM 架构来解决,但也有一些更深层次的问题。 (此外,这种方法只能在“类似”的 JVM 实现之间工作。)
作为序列化/反序列化的实现方法是不实用的 Java objects.
当我们必须将对象保存在持久性存储中或通过网络传输时,我们将对象序列化(在这种情况下,对象应实现可序列化接口)。我的问题是为什么有对象 class 应该实现可序列化接口的限制。我们不能通过按原样获取内存转储来序列化任何随机对象吗?
My question is why there is the restriction that the object class should implement serializable interface.
因为某些类型的 object 在 HotSpot JVM 中根本无法序列化。 class 的实例,例如 Thread
、Process
、Socket
和 Class
。 (在某些情况下,序列化是可以想象的,但不切实际。对于其他情况,这是不可想象的,因为 object 的行为取决于 Java 无法访问的状态。)
Can't we serialize any random object by taking its memory dump as it is.
有几个原因 spring 需要注意(假设我们正在讨论基于 HotSpot 的 JVM)。
- 上述 classes 的实例无法以这种方式正确序列化。
- 如果复制内存快照,则必须将其复制到目标地址中的相同地址space。否则指针将被破坏。
- 每个 object 都有一个 object header,其中包括对 object 的 class 的特殊引用。参考文献可能不同。
- 要复制包含 objects 的内存块,您需要在发送端和接收端以及所有其他应用程序线程禁用 GC。这将是一个停止世界的事件......在两端。
- 您要复制的 object不太可能分配在同一内存块中。
上面的一些问题可以用完全不同的 JVM 架构来解决,但也有一些更深层次的问题。 (此外,这种方法只能在“类似”的 JVM 实现之间工作。)
作为序列化/反序列化的实现方法是不实用的 Java objects.