JVM整体回忆笔记

模块三

内存的分配
指针碰撞
空闲列表
分配内存的时候出现并发问题,几个线程同时抢同一块内存区域
CAS方法解决
本地线程分配缓冲(-XX:+UseTLAB),jvm默认开启

对象的组成
对象头、实例数据、对齐填充(保证对象8个字节的整数倍)
对象头组成
Mark word【32位/64位】、Klass Pointer【开启指针压缩4字节,没开8字节】、数组长度【4字节】
Klass Pointer什么意思
new的对象存放在堆区域中,会指向方法区类源信息【就是一个类的信息】。反射拿类数据信息,jvm是通过Klass Pointer获取
逃逸分析
JDK及之后版本默认开启,关闭参数-XX:-DoEscapeAnalysis
对象存需要连续空间,栈可能没有,只有打散的空间,因此需要标量替换来存储

模块四

垃圾收集算法:分代收集理论、复制算法、标记整理算法、标记清除算法

垃圾收集器:
Serial:-XX:+UseSerialGC -XX:+UseSerialOldGC
单线程,使用时只会使用一条垃圾收集器线程去完成收集工作,而且还会进行STW,知道收集结束
新生代:复制 老年低:标记整理
Parallerl Scavenge:-XX:+UseParallerlGC -XX:+UseParallerlGC
新生代:复制 老年低:标记整理
ParNew收集器:-XX:+UseParNewGC
与Parallerl 相似,但他可以配合CMS收集器使用
新生代:复制 老年低:标记整理
CMS收集器:-XX:+UseConcMarkSweepGC(Old)
步骤:
初始标记:还会STW,记录GC Roots的直接对象,速度很快
并发标记:会与应用线程同时进行,标记直接对象后的引用
重新标记:修正并发标记过程因用户线程继续执行而产生的标记变动,这个阶段的停顿时间比较长,主要用到三色标记里的增量更新算法
并发清理
并发重置
标记清除算法,产生内存碎片,可以通过参数设置调节,可以让清除完后进行整理
CMS缺点:
对CPU资源敏感
无法处理浮动垃圾
使用标记清除算法,产生大量空间碎片
执行过程的不确定性,会存在上一次垃圾没收集完,然后垃圾收集又被触发的情况,会导致全部STW,垃圾收集器会用Serial Old

垃圾收集底层算法实现
三色标记:
JVM整体回忆笔记_第1张图片
JVM整体回忆笔记_第2张图片

你可能感兴趣的:(JVM,jvm,笔记,算法)