美文网首页
源码时代送攻略:Java大厂面试题系列:什么是Yong GC 和

源码时代送攻略:Java大厂面试题系列:什么是Yong GC 和

作者: 源码时代官方 | 来源:发表于2020-12-07 16:23 被阅读0次

    大厂面试题系列:什么是YoungGC 和 FullGC

    上周出去面试的一位精神小伙,回来后突然不精神了,一问,原来面试过程中面试官让他解释一下,「什么是YoungGC 和 FullGC?」

    他按照面试宝典上的答案给面试官说了,但不是面试官想要的答案啊,瞬间整个人就怂了,最后被怼的无言以对。

    确实,在JVM优化部分,我们会接触到 什么 MinorGC,YoungGC、FullGC、OldGC、MajorGC 等等,感觉这些各种乱七八糟都是什么啊,很容易弄混。

    而这些词呢,在面试的过程中,也经常被问到。面试官问的不深,有可能只是考一下你对这些名词的理解。

    而且说实话,这些名词,翻译来翻译去,在业内也没有完全统一的标准,而且有时在不同的书上, 不同的文章里,对同一个名词的定义都是有所不同的。

    所以,是很有可能出现:你的理解和面试官的理解是不同的,这时一定不要慌啊

    在面试时遇到这种情况,「一个名词可能有的多种不同的理解」时,我们要尽可能的都做出说明,避免歧义,防止面试官对你产生不好的误会,甚至自己怀疑自己。

    MinorGC,YoungGC

    ok,我们首先来看最简的慨念: MinorGC [ˈmaɪnər] / YoungGC

    image

    其实所谓的 MinorGC,也可以称为 YoungGC,这二者是相同的,都是专门针对于新生代的GC.

    「新生代」也可以称为「年轻代」,在新生代的Eden内存区域被占满之后,就会触发「新生代」的GC,或者叫「年轻代」的GC,也就是所谓的 MinorGC 和 YoungGC

    FullGC

    image

    从字面上意思其实就可以理解了,“Full” 就是整个的,完整的意思,所以就是对 JVM 进行一次整体 垃圾回收,把各个内存空间区域,不管是新生代,老年代,永久代的垃圾统统都回收掉。

    但这里,往往有一些人会把 FullGC 和 OldGC 混淆:

    说实话,不同的人对同一个概念肯定会有不同理解和看法的,这个大家可以相互讨论 。

    有的人也把MajorGC [ˈmeɪdʒər] 和FullGC划等号,也有人把 FullGC 和 OldGC 划等号,其实这些概念在国内混淆还是很严重的。

    那么为什么会这样呢:

    其实大家在很多地方看到一个说法,意思就是说: 「OldGC执行的时候,一般都会带上一次YoungGC」

    很多人不理解,其实如果你把各个GC触发的条件分析清楚了就知道了,

    (1)YoungGC 就是在新生代的Eden区域满了之后,就会触发,采用复利算法来回收新生代的垃圾

    (2)发生YoungGC之前往往会先检查一下老年代的空间,如果说明本次YoungGC后可能升入老年代对象的大小,可能超过了老年代当前可用内存空间,此时必须先触发一次OldGC给老年代腾出更多的空间,然后再执行YoungGC

    所以,一般OldGC 很可能就是在 YoungGC 之前触发,所以自然OldGC一般都会跟一次YoungGC连带关联在一起了。 那他触发的实际上就是FullGC,因为我们知道 FullGC会包含YoungGC、OldGC和永久代的GC 也就是说触发FullGC的时候,可能就会去回收年轻代、老年代和永久代三个区域的垃圾对象。

    我们可以通过jstat -gcutil <pid> <period> <times>命令监控当前系统的GC状况

    image

    可以看到在GC日志中,FullGC会同时对年轻代、老年代、永久代都进行了垃圾回收。

    最后,小结一下:

    YoungGC 就是年轻代的gc ,OldGC就是老年代的gc ,FullGC是针对年轻代、老年代、永久代进行的整体的gc 。 而且还有几个其他的名词跟他们有重叠的含义,

    比如 MinorGC也可以称之为YoungGC,MajorGC也可以称之为OldGC,

    有的人也把Major GC和Full GC划等号,也有人把Full GC和Old GC划等号。

    所以以后大家在外面跟人聊起各种GC名词的时候,一定要问清楚他指代的到底是什么哦!

    参考文章:

    《深入理解JVM》(周志明著)

    https://www.cnblogs.com/jajian/p/10578628.html

    相关文章

      网友评论

          本文标题:源码时代送攻略:Java大厂面试题系列:什么是Yong GC 和

          本文链接:https://www.haomeiwen.com/subject/mtdtgktx.html