垃圾收集器 (GC) 是只收集对象还是覆盖它存储的数据?

Does Garbage Collectors (GC) collect only objects or also overwrite the data stored by it?

HotSpot 的垃圾收集器 (GC)

当 HotSpot 的垃圾收集器 (GC) 运行时,它是否仅收集对象或覆盖存储的数据以防止内存转储?

这是一个相当宽泛的问题,因为 GC 有许多不同的算法。

以Hotspot和G1为例

次要 GC 将对象从伊甸园 space 复制到幸存者 space,在幸存者 space 秒之间,并将对象提升到老年代(取决于对象年龄)。在所有这些中,这些对象使用的内存随后将被覆盖但不会被释放。

Major GC 会将对象从一个区域(这是内存的逻辑区域)复制到另一个区域以压缩对象,从而消除碎片。同样,这些对象使用的内存将在将来的某个时候被覆盖。

一些收集器,如来自 Azul(我为之工作)的 Zing,当堆使用量减少并且不再需要所有分配的页面时,取消提交未使用的内存。不过,并非所有 GC 都这样做。此 returns 内存页到 OS 允许它们用于其他应用程序。