【问题标题】:Does Garbage Collectors (GC) collect only objects or also overwrite the data stored by it?垃圾收集器 (GC) 是只收集对象还是覆盖它存储的数据?
【发布时间】:2020-02-08 13:31:25
【问题描述】:

HotSpot 的垃圾收集器 (GC)

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

【问题讨论】:

  • 它收集未引用的对象并压缩内存。
  • 我无法确定你最后一句话的开头或结尾。

标签: java memory garbage-collection jvm hotspot


【解决方案1】:

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

我们以 Hotspot 和 G1 为例。

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

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

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

【讨论】:

  • 我不认为这是一个广泛的问题,因为这个问题的直接答案是一个简单的“no”。无论实际的垃圾收集算法如何,无论是否复制,旧对象的存储都可能由于内存被重用而被覆盖,但这不是垃圾收集器的主动操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2012-12-20
  • 2013-12-29
  • 1970-01-01
  • 2014-08-26
  • 2023-03-30
相关资源
最近更新 更多