垃圾收集器

2018-11-19  本文已影响0人  简书徐小耳

垃圾收集器的工作区域如下图:

垃圾收集器 是按照标记存活对象实现的,而标记死亡对象 应该需要扫描所有对象,标记存活对象只需要从gcroot出发即可吧


垃圾收集器.png

注重响应速度的是parNew+cms而注重吞吐量的时候parallel scavenge+parallel old

连线代表两种收集器可以搭配使用

目前最好的垃圾收集器,听说是官方最新出的zgc可惜本人并没有研究

serial收集器

parNew收集器(用在新生代)

parallel scavenge收集器(新生代)

serial old收集器(老年代)

parallel old收集器(老年代)

CMS收集器(老年代)

四个步骤:

初始标记

并发标记

浮动垃圾:在标记过程的时候产生的垃圾就是浮动垃圾。因为老年代需要预留一点内存给用户线程,所以会在一个阈值的时候触发cms垃圾收集器,如果预留的内存无法满足程序运行就会触发concurrent mode failure。这个时候虚拟机将启动serial old 来进行老年代的垃圾收集。

缺点:

G1收集器(年轻代和老年代)

内存分配和回收策略

-在发送minor gc的时候 虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于则minor gc 改为full gc,如果小于则查看是否允许担保,如果允许则继续进行minor gc 否则 也是full gc

上一篇下一篇

猜你喜欢

热点阅读