JVM知识点梳理

通过Java命令执行代码的大体流程

在这里插入图片描述

类加载器的双亲委派机制

在这里插入图片描述

JVM内存模型

在这里插入图片描述

JVM通用参数设置

在这里插入图片描述

对象创建的主要流程

在这里插入图片描述

分配内存之划分内存

1.指针碰撞
2.空闲列表

分配内存之并发问题解决方法

1.CAS
2.本地线程分配缓冲(TLAB)

对象头组成部分

1.标记字段
2.Klass类型执行
3.数组长度

指针压缩

1.33位到35位的内存地址在存储时会进行压缩成32位进行存储,节省内存空间
2.堆内存小于4G时不需要启用指针压缩
3.堆内存大于32G时压缩指针会失效

对象内存分配流程图

在这里插入图片描述

老年代空间分配担保机制

在这里插入图片描述

JVM垃圾收集

垃圾收集算法

分代收集理论
标记复制算法
标记整理算法
标记清除算法

垃圾收集器

在这里插入图片描述

串行收集器

单垃圾收集线程
-XX:+UseSerialGC -XX:+UseSerialOldGC
新生代:标记复制 老年代:标记整理

并行收集器

多垃圾收集线程
-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代) JDK1.8默认使用
新生代:标记复制 老年代:标记整理

ParNew收集器

可以与CMS配合使用的并行收集器
-XX:+UseParNewGC
新生代:标记复制

CMS收集器

垃圾收集线程与用户线程同时工作
-XX:+UseConcMarkSweepGC
老年代:标记清除
过程:初始标记-》并发标记-》重新标记-》并发清理-》并发重置

CMS参数

在这里插入图片描述

并发标记之 三色标记

对于读写屏障,以Java HotSpot VM为例,其并发标记时对漏标的处理方案如下:
CMS:写屏障 + 增量更新
G1,Shenandoah:写屏障 + SATB
ZGC:读屏障

跨代引用之记忆集与卡表

G1收集器

多垃圾收集线程
-XX:+UseG1GC JDK1.9默认使用G1
新老代都使用它,整体是基于标记整理 局部是基于标记复制;
可预测的停顿时间模型
分区Region: Eden,Survivor,Old,Humongous,
分代概念是逻辑概念,而非物理概念
过程:初始标记-》并发标记-》最终标记-》筛选回收(STW)
筛选回收时根据优先列表及回收价值进行垃圾回收;
在这里插入图片描述

G1参数设置

在这里插入图片描述

G1使用场景

在这里插入图片描述

ZGC收集器

不分代(暂时)
ZGC的Region分为三类:小型S(2M),中型M(32M),大型L(容量不固定,必须是2M的整数倍,存放4MB及以上单个大对象)
NUMA:给CPU分配有限内存
颜色指针:ZGC将GC信息保存在指针中;
过程:
1并发标记(初始标记-》并发标记-》最终标记)
2并发预备重分配
3并发重分配
4并发重映射(下次GC的1并发标记中去完成)

ZGC触发时机

ZGC目前有4种机制触发GC:
1.定时触发,默认为不使用,可通过ZCollectionInterval参数配置。
2.预热触发,最多三次,在堆内存达到10%、20%、30%时触发,主要时统计GC时间,为其他GC机制使用。
3.分配速率,基于正态分布统计,计算内存99.9%可能的最大分配速率,以及此速率下内存将要耗尽的时间点,在耗尽之前触发GC(耗尽时间 - 一次GC最大持续时间 - 一次GC检测周期时间)。
4.主动触发,(默认开启,可通过ZProactive参数配置) 距上次GC堆内存增长10%,或超过5分钟时,对比距上次GC的间隔时间跟(49 * 一次GC的最大持续时间),超过则触发

如何选择垃圾收集器

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值