我们不能只获取要序列化的对象的 RAM 内存转储吗?



当我们必须将对象保存在持久存储中或通过网络传输时,我们会序列化对象(在这种情况下,对象应该实现可序列化接口(。我的问题是为什么对象类应该实现可序列化接口有限制。难道我们不能通过原样获取任何随机对象的内存转储来序列化它吗?

我的问题是为什么对象类应该实现可序列化接口有限制。

因为某些类型的对象在HotSpot JVM中根本不可序列化。类(如ThreadProcessSocketClass(的实例。(在某些情况下,序列化是可以想象的,但并不实用。在其他情况下,这是不可想象的,因为对象的行为取决于Java无法访问的状态。(

难道我们不能通过原样获取任何随机对象的内存转储来序列化它吗?

脑海中浮现出一些原因(假设我们谈论的是基于HotSpot的JVM(。

  1. 以上类的实例无法以这种方式正确序列化
  2. 如果复制内存快照,则必须将其复制到目标地址空间中的同一地址。否则指针将被破坏
  3. 每个对象都有一个对象头,其中包括对对象类的特殊引用。参考文献可能有所不同
  4. 要复制包含对象的内存块,需要在发送端和接收端以及所有其他应用程序线程禁用GC。这将是一个世界性的事件。。。两端
  5. 要复制的对象不太可能分配到同一内存块中

上面的一些问题可以用完全不同的JVM体系结构来解决,但也存在一些更深层次的问题。(此外,这种方法只能在"类"JVM实现之间工作。(

作为序列化/反序列化Java对象的实现方法,它是不实用的。

相关内容

  • 没有找到相关文章