JVM全家桶 (图文详解均在注释,图片需要时间加载)
2023-06-30 14:57:52 0 举报
AI智能生成
JVM知识大全,结构清晰明了,知识点解析充分,简约而不简单。
作者其他创作
大纲/内容
类相关
类加载过程
1、加载
2、验证
3、准备
4、解析
5、初始化
6、使用
7、卸载
类加载器
启动类加载器-Bootstrap ClassLoader
扩展类加载器-Extension ClassLoader
应用程序类加载器-Application ClassLoader
用户自定义类加载器-User ClassLoader
双亲委托机制
好处
确保安全,避免java核心类库被修改
避免重复加载
保证类的唯一性
如何破坏双亲委派机制
重写 loadClass()
不打破双亲委派而重写加载方法
重写findClass()
自定义类加载器
继承ClassLoader
覆盖loadClass()或者findClass()方法
java内存模型
jvm内存结构
内存区域划分
私有区
虚拟机栈
栈布局
压栈出栈过程
局部变量表
压栈图示
栈内存
局部变量表
操作数栈
方法返回地址
动态链接
虚拟机栈的特点
本地方法栈
程序计数器
公有区
堆
堆的特点
对象在堆中的分配方式
指针碰撞:内存规整时使用
空闲列表:内存不规整时使用
TLAB:本地线程缓冲区
对象分配过程
Full GC /Major GC 触发条件
四种引用方式
元空间
常量池
构成
字面量
符号引用
作用
运行时常量池
符号地址变为真实地址
对象的创建过程
本机直接内存
内存回收
如何判断对象能否回收?
GC Root
内存分配与回收策略
短期存活、长期存活
大对象直接进入老年代
动态对象年龄判定
老年代空间担保机制
什么情况下对象会进入老年代?
为什么需要分新生代和老年代?
为什么要年轻代要分2个survivor区?
Minor GC vs Major GC/Full GC
触发Full GC的情况
回收算法
复制算法(新生代)
标记-清除算法
标记-整理算法(老年代)
优缺点
分代收集算法
垃圾收集器
收集器特点
分类
serial
serial old
parNew
parallel scavenge,追求 CPU 吞吐量
吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)
parallel old
CMS
四个阶段
初始标记
并发标记
重新标记
并发清除
缺点
1、并发收集会占用CPU资源
2、会产生浮动垃圾
3、产生碎片空间
总结
设计目的
最求最短垃圾回收暂停时间
回收过程
初始标记、并发标记、并发预处理、重新标记和并发清除
弊端
会产生内存碎片、需要空间预留、停顿时间是不可预知的
被弃用的原因
1、CPU占用不可控
2、退化成SerialOld,暂停用户线程,单线程回收,性能下降
3、停顿时间不可预知
G1
基本原理
如何做到可预测的停顿时间?
Java堆进行Region拆分
追踪每个Region的回收价值
建立可预测的停顿时间模型
大对象处理
新生代垃圾回收
1个eden和2个survivor
示例
老年代垃圾回收
是一种复制算法,不会产生碎片
新老年混合回收
G1回收失败时的Full GC
什么时候使用G1?
各种收集器使用场景
jvm调优
0 条评论
下一页