JVM
2022-03-19 00:42:36 0 举报
AI智能生成
登录查看完整内容
JMM思维脑图
作者其他创作
大纲/内容
分代收集理论
标记-复制算法
效率问题
空间问题
标记-清除算法
标记-整理算法
垃圾收集算法
图片
STW(Stop The Word)
优点
Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)
jdk1.8默认的
ParNew收集器(-XX:+UseParNewGC)
优缺点
初始标记
并发标记
重新标记
并发清理
并发重置
核心参数
多标-浮动垃圾
常用的参数
写屏障
oop oop_field_load(oop* field) { pre_load_barrier(field); // 读屏障-读取前操作 return *field;}
读屏障
增量更新Incremental Update
当对象B的成员变量的引用发生变化时,比如引用消失(a.b.d = null),我们可以利用写屏障,将B原来成员变量的引用对象D记录下来:void pre_write_barrier(oop* field) { oop old_value = *field; // 获取旧值 remark_set.add(old_value); // 记录原来的引用对象}
原始快照Snapshot At The Beginning,SATB
漏标-读写屏障
CMS收集器(-XX:+UseConcMarkSweepGC(old))
为什么G1用SATB?CMS用增量更新?
黑色
灰色
白色
三色标记
介绍
YoungGC
初始标记(initial mark,STW)
并发标记(Concurrent Marking):同CMS的并发标记
最终标记(Remark,STW):同CMS的重新标记
筛选回收(Cleanup,STW
过程
MixedGC
Full GC
G1垃圾收集分类
对象进入老年代
Garbage-First
G1能充分利用CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短Stop-The-World停顿时间。部分其他收集器原本需要停顿Java线程来执行GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行。
并行与并发
虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但是还是保留了分代的概念。
分代收集
与CMS的“标记--清理”算法不同,G1从整体来看是基于“标记整理”算法实现的收集器;从局部上来看是基于“复制”算法实现的。
空间整合
是G1相对于CMS的另一个大优势,降低停顿时间是G1 和 CMS 共同的关注点,但G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段(通过参数\"-XX:MaxGCPauseMillis\"指定)内完成垃圾收集。
可预测的停顿
特征
重要参数
G1垃圾收集器优化建议
什么场景适合使用G1
每秒几十万并发的系统如何优化JVM
G1收集器(-XX:+UseG1GC)
ZGC收集器(-XX:+UseZGC)
如何选择垃圾收集器
垃圾收集器
安全点
安全区域
安全点和安全区域
变脏
维护
记忆集与卡表
加载
验证
准备
解析
初始化
使用
卸载
步骤
总体来说就是自己加载没有就从父类加载器找。如果找到bootstrap加载器还没有就原路返回找
沙盒安全:jdk自己的核心类API不可篡改
保证同名字的类只有一个
为何这样设计
如何打破
双亲委派机制
全盘负责
委托
全盘负责委托机制
类加载的过程
流程图片
类加载检查
指针碰撞法
空闲列表
到底用那种
如何划分内存
CAS
Thread Local Allocation Buffer(TLAB)
解决并发问题
对象逃逸分析
标量替换
对象栈上分配
对象在Eden区分配
大对象直接进入老年代
长期存活的对象将进入老年代
对象动态年龄判断
老年代空间分配担保机制
对象什么时候进入老年代
引用计数法
可达性分析算法
对象内存回收
内存分配
初始化零值
32对象头
64位头像头
什么是指针压缩
为什么开启
怎么开启
指针压缩
设置对象头
执行<init>方法
流程文字
强引用
软引用
弱引用
span style=\
常见的引用类型
finalize()方法最终判定对象是否存活
public class ReferenceCountingGc { Object instance = null; public static void main(String[] args) { ReferenceCountingGc objA = new ReferenceCountingGc(); ReferenceCountingGc objB = new ReferenceCountingGc(); objA.instance = objB; objB.instance = objA; objA = null; objB = null; }}
对象的回收
如何判断一个类是无用的类
对象的创建
分析
JVM参数优化分析1
自由主题
JVM
0 条评论
回复 删除
下一页