CS面试指南Java学习笔记

GC是在什么时候,对什么东西,做了什么事情

2017-08-24  本文已影响22人  雨笋情缘

1、在什么时候GC

       首先,GC堆内存分为三部分:Young Generation,Old Generation,Permanent Generation。

        Young Generation 分为:Eden , Survivor1 , Survivor2, 新创建的对象会分配在Eden区,在经历一次Minor GC后会被移到Survivor 1区,再经历一次Minor GC后会被移到Survivor 2区,直到升至老年代,需要注意的是,一些大对象(长字符串或数组)可能会直接存放到老年代;升到老年代的对象大于剩余空间时,会发生Full GC,或者小于时,查看是否设置了XX:+HandlePromotionFailure(允许担保失败)参数,若允许,则只会进行Minor GC,此时可以容忍内存分配失败;若不允许,强制Full GC。

       GC与非GC时间耗时超过了GCTimeRatio的限制引发OOM,调优诸如通过NewRatio控制新生代老年代比例,通过MaxTenuringThreshold控制进入老年前生存次数等。了解GC参数,请参见另一篇文章

2、对什么东西GC

       从GC root 开始搜索,搜索不到的对象和经过第一次标记、清理后仍旧没复活的对象,这类对象会被GC。

3、GC做了什么事情

        按照各部分的收集器进行空间回收,其中涉及到的收集器和GC算法参见另两篇文章:

收集器 和GC算法

        新生代做复制清理、老年代做的是标记整理、标记清除

参考文献:

http://icyfenix.iteye.com/blog/715301

https://yemengying.com/2016/05/13/jvm-GC/

http://www.cnblogs.com/zhguang/p/3257367.html

上一篇下一篇

猜你喜欢

热点阅读