美文网首页CS面试指南Java学习笔记
GC是在什么时候,对什么东西,做了什么事情

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

作者: 雨笋情缘 | 来源:发表于2017-08-24 15:34 被阅读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

    相关文章

      网友评论

        本文标题:GC是在什么时候,对什么东西,做了什么事情

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