【发布时间】:2020-02-08 13:31:25
【问题描述】:
HotSpot 的垃圾收集器 (GC)
当 HotSpot 的垃圾收集器 (GC) 运行时,它是否只收集对象或覆盖存储的数据以防止内存转储?
【问题讨论】:
-
它收集未引用的对象并压缩内存。
-
我无法确定你最后一句话的开头或结尾。
标签: java memory garbage-collection jvm hotspot
HotSpot 的垃圾收集器 (GC)
当 HotSpot 的垃圾收集器 (GC) 运行时,它是否只收集对象或覆盖存储的数据以防止内存转储?
【问题讨论】:
标签: java memory garbage-collection jvm hotspot
这是一个相当广泛的问题,因为 GC 有许多不同的算法。
我们以 Hotspot 和 G1 为例。
Minor GC 将对象从 Eden 空间复制到幸存者空间,在幸存者空间之间,并将对象提升到老年代(取决于对象年龄)。在所有这些中,这些对象使用的内存随后将被覆盖但不会被释放。
主要 GC 会将对象从一个区域(内存的逻辑区域)复制到另一个区域以压缩对象,从而消除碎片。同样,这些对象使用的内存将在未来的某个时候被覆盖。
当堆使用量减少并且不再需要所有分配的页面时,一些收集器(例如 Azul 的 Zing(我为之工作))取消提交未使用的内存。不过,并非所有 GC 都这样做。这会将内存页面返回给操作系统,允许它们用于其他应用程序。
【讨论】: