分代算法:根据各个年代特点选用不用垃圾回收算法
新生代:采用复制算法
老年代:使用标记-整理或标记-清除算法
并行:垃圾收集的多线程同时进行
并发:垃圾收集的多线程和应用的多线程同时进行
回收器
1,Seral/Serial Old : 单线程
2,ParNew: 和Seral基本没区别,多线程
3,Parallel Scavenge(ParallerGC)/Parallel Old : 关注吞吐量的收集器,主要用于后台运算而不需要太多交互的任务。
4,CMS:一种最短停顿时间的收集器。使用标记清除算法
5,G1:jdk1.9以后推荐使用,跨越的新生代和老年代。使用标记整理和化整为零
所有新生代都是用复制算法,老年代 标记整理和标记清除
-XX:+UseConcMarkSweepGC,应用于B/S系统服务器,重视服务的响应速度,希望系统停顿时间最短,给用户较好的体验。
垃圾回收过程:
-XX:+UseG1GC
内部布局改变
G1把堆划分多个大小相等的独立区域(Region),新生代和老年代不再物理隔离。
算法:标记-整理(humongous)和复制回收算法(survivor)。
GC模式
Young GC(回收Eden、Survivor区):选定所有年轻代的Region,通过控制年轻代个数,来控制young GC 的时间开销(复制回收算法)
Mixed GC(全部区域回收):不但选定年轻代Region还要选定老年代收益高的若干Region,进行释放。Mixed GC 不是Full GC,如果Mixed GC 跟不上程序分配内存速度,就会使用serial odl GC(Full GC)来收集整个GC heap。4G1不是Full GC。
全局并发标记
1, 初始标记:仅仅标记一下GC Roots能直接关联的对象,此阶段需要停顿线程(STW),但耗时很短。
2, 并发标记:从GC Roots开始对堆进行可达性分析,找到活对象,耗时很长,但与用户程序并行
3,最终标记:为了修正并发标记阶段因用户程序继续而导致标记产生变动的那一部分标记记录。需要停顿线程(STW),但是可并行执行。
4,筛选回收:首先对各个Region中的回收价值和成本进行排序,根据用户所期望的GC停顿时间来指定回收计划。此阶段与用户并行一起并行执行,但是因为回收一部分Region,时间是用户可控的,而且停顿用户线程能大幅度提交收集效率。
特点
1, 空间整理:不会产生内存碎片。算法为标记-整理和复制回收算法。
2, 可预测的停顿:G1,刷选不是经常使用,而是刷选那些回收效率比较高的区域(回收回报比比较高)。总共1000个区域,一个区域10m * 筛选常用的100个区域 急需回收。
Stop The World
GC收集器和GC优化的目标就是尽可能的减少STW的时间和次数。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。