假设我有一个名为“master”的对象,它分别拥有 100 个名为“slave0”到“slave99”的对象。(这不是一个数组。我的“主”类中有 100 个字段,分别称为 salve0 到 slave99。)现在,假设我的程序首先读入一个包含“主”对象的序列化存储版本的文件。但是,假设我的程序从不使用对象 slave50 到 slave99。会发生什么?(我的猜测是,作为读取/反序列化过程的一部分,java 程序将首先读取所有 100 个从属对象,并且只有在读入所有 100 个从属对象后,它可能会选择执行 GC,此时对象 slave50 到 slave99 将被 GC 删除并回收内存。这是正确的吗?注意:对象“master”仍在使用中,因此从技术上讲,对象 slave50 到 slave99 仍在被父对象 master 引用,并且父对象 master 仍在积极使用中。)
因此,假设我上面关于 GC 工作原理的猜测是正确的;如果我的长时间运行的程序花了几分钟时间处理对象 slave0 到 slave50,然后进入另一个名为“X”的最终(长时间运行)过程,该过程只处理对象 slave0 到 slave25。GC 会不会意识到即使对象 slave25 到 slave50 仍然被父对象 master 引用,并且即使对象 master 仍在使用,GC 仍然足够聪明以摆脱对象 slave25 到 slave50,因为没有人是否会从“程序 X”开始使用它?
慕少森
相关分类