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()方法
自定义类加载器
类相关
jvm内存结构
压栈出栈过程
局部变量表
栈布局
压栈图示
操作数栈
方法返回地址
动态链接
栈内存
虚拟机栈的特点
虚拟机栈
本地方法栈
程序计数器
私有区
堆的特点
指针碰撞:内存规整时使用
空闲列表:内存不规整时使用
TLAB:本地线程缓冲区
对象在堆中的分配方式
对象分配过程
Full GC /Major GC 触发条件
四种引用方式
堆
字面量
符号引用
构成
作用
常量池
符号地址变为真实地址
运行时常量池
元空间
公有区
内存区域划分
对象的创建过程
本机直接内存
java内存模型
GC Root
如何判断对象能否回收?
短期存活、长期存活
大对象直接进入老年代
动态对象年龄判定
老年代空间担保机制
什么情况下对象会进入老年代?
为什么需要分新生代和老年代?
为什么要年轻代要分2个survivor区?
Minor GC vs Major GC/Full GC
触发Full GC的情况
内存分配与回收策略
复制算法(新生代)
标记-清除算法
优缺点
标记-整理算法(老年代)
分代收集算法
回收算法
收集器特点
serial
serial old
parNew
吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)
parallel scavenge,追求 CPU 吞吐量
parallel old
初始标记
并发标记
重新标记
并发清除
四个阶段
1、并发收集会占用CPU资源
2、会产生浮动垃圾
3、产生碎片空间
缺点
最求最短垃圾回收暂停时间
设计目的
初始标记、并发标记、并发预处理、重新标记和并发清除
回收过程
会产生内存碎片、需要空间预留、停顿时间是不可预知的
1、CPU占用不可控
2、退化成SerialOld,暂停用户线程,单线程回收,性能下降
3、停顿时间不可预知
被弃用的原因
弊端
总结
CMS
基本原理
Java堆进行Region拆分
追踪每个Region的回收价值
建立可预测的停顿时间模型
如何做到可预测的停顿时间?
大对象处理
示例
1个eden和2个survivor
新生代垃圾回收
是一种复制算法,不会产生碎片
老年代垃圾回收
新老年混合回收
G1回收失败时的Full GC
什么时候使用G1?
G1
分类
各种收集器使用场景
垃圾收集器
内存回收
jvm调优
JVM
0 条评论
回复 删除
下一页