【问题标题】:When you serialized and deserialized an Object where is saved the status of it? [closed]当您序列化和反序列化一个对象时,它的状态保存在哪里? [关闭]
【发布时间】:2018-03-04 12:35:07
【问题描述】:

我知道 Java 中的对象存在于堆上,但是当我开始序列化对象并在反序列化之后它的状态保持在堆上?还是在不同的地方?

编辑: 我的意思是,JVM 如何在堆上重新创建一个新对象?只是读取文件?

我想知道堆上发生了什么,在 JVM 销毁一个对象之前和之后,在它回来之后?要执行此操作,是否在内存中存储了一些内容或所有信息都在文件上序列化和反序列化?

【问题讨论】:

  • 你说的status是什么意思?
  • @SotiriosDelimanolis:我的意思是在序列化之前和恢复它时关于类的所有内容。
  • '关于类的一切'不会因序列化或反序列化而改变,而是存储在类中。不清楚你在问什么。
  • @EJP:我谈到了对象所在的堆!例如,如果序列化或反序列化出错会发生什么? JVM从零创建另一个对象?或者如果我们之前保存了一些关于类的东西,怎么能恢复一切呢?这样我的意思是状态

标签: java serialization deserialization heap-memory


【解决方案1】:

当您序列化一个对象时(我想您正在使用ObjectIn/OutputStream),您正在将Java 对象转换为流中的二进制数据。这是流可以去任何地方。它可以转到 Web 服务器或文件或其他东西。根据我的经验,将对象序列化为文件是最常见的。

对象序列化后,将存储在您的硬盘/SSD 上。但是,在您的程序完成之前,内存中还有一个对象的独立副本。它不能从记忆中消失,因为你可能想再次使用它。

【讨论】:

  • 我编辑了问题
  • @SwampThing 对象的每个非transient 字段都被序列化。所以是的,JVM 将通过读取文件重新创建一个全新的对象。
猜你喜欢
  • 1970-01-01
  • 2019-02-26
  • 2023-03-23
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多