【小威哥带你面试】第2期:FullGc触发问题

1:前语

现在的面试官,哎,真是一言难尽,总是问一些千奇百怪的问题,许多问题也都是死记硬背,真的遇到的时分还不是要去搜索各种资料check一遍,究竟人类总是健忘的生物啊。

2:面试官之恶魔命题

此时你或许现已答复了许多JVM和GC根底的问题了:

这个时分,Q g x ) G W面试s , l官忽然露出一个奇怪的浅笑

【面试官】:这位同学,既然你对JVM和GC了解了的话,那么请问一下,FullGc会在什么时分动身2 G e G

这个时分你的心里:MMP,这题我刚好背了,不过太紧张了想不起来7 ^ e p了有点,可是仍是要表面笑嘻嘻,心里mmp。

3:别慌,逐渐解答

这个时分,先考虑下什么状况下需要做FullGc,无非是老年代的空间缺乏了或许行将缺乏了,那么其实有以下几v h m r M – k P y种状况:

  • 代码中闪现调用的 System.gc) 0 k ! `(),这) R (个应该我们都知道,不过在实际状况下一般也不会直接写这个。
  • 老年代空间缺乏,这个空间缺乏有两种,一种是分配一个方针,空间真的缺乏。另一种是由于内存碎片,导致没有连续内存空间来分配给方针。这个也很好了解了,究竟没有连续的内存空间就无法分配数组这样的数据结构了。
  • CMS收集器呈现担保失利:Minorl 0 Y I + P – GCC v Q J I [之前,会比较“老年代剩余空间”与“新生代一切方针之和”的巨细,假如老年代剩余空间大于新生代之和,则本次Minor GC一定是安全的,反之,去看参数是否允许担保失利,不允许,则会触发一次Full GC。

这个其实也好了解,由于cms是{ 9 s .不停顿的,万一此M 8 6 } #刻又有用户线程操作塞了点新的O h { s方针,那么就有或许导致这个minor gc的方针进入x J 8 F % f老年代,老年代空间会缺乏,所以要预先铲除一下老年代的空间。

  • 之前历次minorGC晋升到老年代的方针均匀巨细R g I O ` q P假如大于此时老N Q # Z f年代的剩余* w T S | p空间,也会导致一次Full GC。这个和上面一点是差不多的,也便是以为进老年代方针太对了或许会导致老年代空间缺乏触发sC v Gerial old导致间断stop the world。
  • metaspp P d , L Sace空间缺乏也会造成Full GC。

等你说完T 0 n – 6 e 8 E 9这些,面试官又露出了满意的笑脸,然后紧接着笑眯眯的问你:那么cms收集器的话是怎么工作的呢?三色收集法是什么呢?G1收集器的原理呢? 别问,问便是技能深度不可

4:总结

吐槽一下:其实目前的面试越来越像是套官话,套标题。小威哥觉得不如在技能上多查询一个人,仍是应该尽量找一个趣f 5 B ~ 2 X u味相投,人品好达p a } 9 D v Q x观开畅,技能中上的伙伴更加好一点K ! g P哈哈哈。