五、深入JVM--垃圾收集器详解

垃圾收集器

在这里插入图片描述
(黄色区域是新生代区域,绿色部分是老年代区域)
Serial
Serial是单线程垃圾收集器。
用户线程执行时,出现垃圾收集,用户线程会被暂停(stop world),然后执行Serial垃圾收集器线程。执行完毕之后,才会继续执行用户线程。

在这里插入图片描述

ParNew
ParNew是多线程的垃圾收集器。和Serial一样,不同的是,ParNew支持多线程。

Parallel
采用复制算法、用户线程执行时,垃圾回收时会暂停用户线程,然后多个垃圾回收线程并行操作。

用户线程执行时,出现垃圾回收,用户线程会被暂停,然后多个垃圾收集器并行执行。

在这里插入图片描述

CMS垃圾收集器
采用标记清除算法
初始标记:GcRoot扫描,标记存活对象。
并发标记:垃圾回收线程与用户线程并行执行。
重新标记:stop world,垃圾回收线程并行执行。
并发清除:垃圾回收线程与用户线程并行执行。

优点:
并发操作,低停顿。

缺点:
占用CPU资源(在并发标记和并发清除中,用户线程与GC线程并行执行,占用CPU资源)
无法处理浮动垃圾
采用标记清除算法,会出现空间碎片

并发操作(垃圾回收线程与用户线程同时执行(交替执行))
并行操作(多个垃圾回收线程同时执行。)

在这里插入图片描述

G1
目标和CMS相同,降低用户线程停顿时间。
采用标记压缩算法。

初始标记:stop world,GC线程初始标记
并发标记:用户线程与GC线程并行、并发执行
最终标记:

在这里插入图片描述

G1的内存模型:
GC回收的最小单位为Region。
在这里插入图片描述

G1的分代模型:
TLAB:线程在堆内存的一块独立区域,每个线程各有一块。这个区域就是在eden区分配。作用:线程之间不用再堆内存中争抢资源,减少竞争资源的开销。
PLAB:TLAB进生的空间。
GCLAB:GC也是一个线程,gc线程在工作时,也需要内存分配。这时候被分配在surver区或老年区。

在这里插入图片描述

G1的分区模型(分区和分区之间怎么关联)
Young区的对象被old区的对象引用,在进行young GC时,扫描整个堆内存?
不会。采用RSET表,记录对象被其他分区代的引用。
PRT:每个Region都有一个table。记录Reion被谁引用。Card被谁引用。Card中的对象被谁引用的信息。类似一个公司账本。

在这里插入图片描述

G1的收集器
在这里插入图片描述

ZGC收集器

gdk11中的垃圾收集器、

虚拟机工具
1.jps
查看本地JAVA进程。

jps -L 列出主类(入口类)全名

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值