jvm_book icon indicating copy to clipboard operation
jvm_book copied to clipboard

关于Full Gc的疑问

Open Kyrie-yx-Irving opened this issue 5 years ago • 2 comments

作者,您好,我看你在介绍垃圾回收的算法的时候,似乎没有对Full Gc进行详细的介绍(虽然在P77面有介绍),我对Full GC 与Minor GC 和 Major GC之间的关系有一些疑问? 是不是这三者满足这样的关系: Full GC = Minor GC + Major GC ? 如果不是的话,你能解释一下它们之间的关系吗?

Kyrie-yx-Irving avatar Sep 04 '20 13:09 Kyrie-yx-Irving

Full GC就是面向全堆的GC,在论文或者专业GC的书籍中是“Full Heap Garbage Collection"的缩写,可见就是针对“Full Heap”的。在Major GC被部分资料混淆为“只针对老年代的GC”以前,它跟术语“Major Garbage Collection”是等价的。

Full GC = Minor GC + Major GC

以上提法并不准确。

  • 从因果关系看,在没有分代收集之前的GC就是FullGC,有分代之后才出现的Minor GC等概念。所以用等号右边来解释等号左边不符合因果率。
  • 从实现角度看,单独实现FullGC无疑会比通过不同收集器针对不同区域分别收集要简单得多,假如只考虑FullGC的话,像记忆集这些结构都没什么存在的必要。所以从等号右边所做的工作比等号左边要更多。

要硬说它们的关系,就是同为垃圾收集,目标范围不同,有的针对全堆,有的针对新生代。用集合或者包含来理解并不恰当,即Appel经典分代中“Full Heap=Young Gen + Old Gen”,并不能推导出“Full GC = Young GC + Old GC ”。

此类问题我印象中在知乎、stackoverflow上面都很常见,按照置顶帖的建议,你可以先搜索一下,或者在那些网站上提问,可以更好地利用资源。

fenixsoft avatar Sep 05 '20 02:09 fenixsoft

Full GC = Minor GC + Major GC是不能这样比较的,可以垃圾回收的作用域去询问,比如full gc的作用域是整个堆和方法区。

tianyuxingxuan avatar Sep 14 '20 02:09 tianyuxingxuan