GC后对象引用更改

Gre*_*mar 6 java garbage-collection

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

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

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

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

pie*_*t.t 8

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

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