GC后对象引用更改

时间:2016-02-22 07:49:27

标签: java garbage-collection

我对GC有点困惑,当GC执行时它会停止所有线程并收集垃圾引用。

在GC之后,jvm会执行任何压缩吗?

  

压缩:意味着移动“使用中”内存区域以消除由终止引用引起的漏洞

如果是,那么jvm是否维护旧的引用,或者它为所有剩余的对象分配新的引用?

1 个答案:

答案 0 :(得分:7)

关于压缩:它取决于使用的算法。由于所有年轻一代的GC都在复制收藏家:是的,他们做了营地活动,他们甚至将所有幸存的物品重新安置到不同的记忆区域。对于老一代收集器,它取决于使用什么收集算法。虽然标准的标记 - 扫描 - 紧凑型 - 收集器是压缩的(这就是" compact"存在的原因)CMS收集器(并发标记扫描)通常不进行任何压缩,除非它是不可避免的,因此必须管理堆碎片。

当移动对象时(无论是因为使用了复制收集器还是因为压缩),现有引用都会更新为指向新的内存位置。