狠狠撸

狠狠撸Share a Scribd company logo
初探
体系结构
类加载?子系统
内存模型
GC
常?用?工具
体系结构
类加载器??子系统
执?行行引擎 本地?方法库本地?方法接?口
class ?文件
?方法区 堆
虚拟机
栈
本地?方
法栈
程序计
数器?
运?行行时数据区
? 类加载器??子系统: JVM启动时或者是在运?行行时将需要的class?文件加载到JVM中
? 运?行行时数据区:JVM运?行行时内存空间的组织
? 执?行行引擎: ?用于执?行行JVM字节码指令
?用户?自定义类加载器?,例例如:
URLClassLoader
WebappClassloader
加载JVM运?行行时需要的类
$JRE_HOME/libBootStrapClassLoader
引导类加载器?
ExtensionClassLoader
扩展类加载器?
ApplicationClassLoader
应?用类加载器?
CustomClassLoader1
?用户加载器?1
CustomClassLoader2
?用户加载器?2
类加载器?
加载JVM标准扩展类
$JRE_HOME/lib/ext
加载-classpath 指定的?目录
内存模型
虚拟机栈
Java Stack
本地?方法栈
Native Method Stack
程序计数器?
Program Counter Register
?方法区
Method Area
堆
Heap
GC区域
? ?方法区: 所有线程共享,
? 堆:所有线程共享, 存放对象实例例, GC的主要区域
? 虚拟机栈: 线程私有, 主要存储局部变量量表 , ?方法?入?口等
? 本地?方法栈:线程私有, 与虚拟机栈类似, 只是为native?方法服务
? 程序计数器?: 线程私有, 当前线程所执?行行的字节码指令的?行行号指示器?
内存管理理
Eden S0 S1 OldMetaspace(Perm)
Heap
Young
分代管理理
Method Area
1. 为什什么?
? 不不同的对象?生命周期不不同, ?大部份是临时对象, 朝?生夕死
? 根据不不同的代, 采?用不不同的GC算法, 提?高GC效率
2. GC 类型
? Minor GC
? Major/Full GC
(Xmx, Xms)
(NewSize)
GC
Serial ParNewParallel Scanvenge
1. 年年轻代使?用复制算法, 分配对象时, Eden 空间不不?足时触发
? 复制Eden和From(S0,S1)中存活对象到To(S1,S0)
? 部分对象会晋升到Old区
? 清空Eden和From; From和To交换,直到下次GC
2. Serial Old: 使?用标记-压缩算法,串串?行行,独占式垃圾回收器?, STW 时间?长
3. Parallel Old: 使?用标记-压缩算法,关注系统吞吐率
4. CMS: 并发-标记-清除算法, 获取最短停顿时间
Serial Old CMSParallel Old
G1
年年轻代
年年?老老代
CMS(concurrent mark sweep)
3
4
2
1
Stop The Word
Initial Mark
标记Root可以直达的对象,耗时短
Concurrent
Concurrent Mark
从第?一步标记的对象出发,并发标记可达的对象
Stop The Word
Remark
重新标记, 修正并发标记期间因?用户程序继续运
?行行导致的对象关系间变化及新创建的对象
Concurrent
Concurrent Sweep
并?行行的进?行行?无?用对象的回收
5
Concurrent
Concurrent Reset
并发重置,为下?一次gc做好准备
CMS?日志
年年?老老代当前
使?用情况
年年轻代当前使
?用情况
整个堆当前
使?用情况
JVM启动后经历
的时间(秒)
CMS会退化为Serial Old
G1
? 同时?工作在年年?老老代和年年轻代
? 适?用于多核处理理器?, ?大内存容量量(>6G)的系统
? 分代收集
? 空间整合
? 可预测的停顿
? GC模式: young gc, mixed gc, full gc
内存结构:
G1堆由多个区(region)组成,每个区?大?小1M~32M,逻辑上区有3种类型,包括(Eden、
Survivor、Old),按分代划分包括:年年轻代(Young Generation)和?老老年年代(Old Generation)
ZGC
1. 暂停时间 < 10ms
2. TB级别的堆内存管理理能?力力
3. 兼顾吞吐率和响应时间
4. 暂停时间不不会随堆或实时设置?大?小?而增加
5. 随JDK 11 正式发布
6. ?支持Linux X64
7. 详细信息: http://openjdk.java.net/jeps/333
常?用?工具
1. jvisualvm
2. jstat
? gcutil
? gccause
? class
3. jmap
? heap
? histo
? dump
4. jinfo
5. http://gceasy.io
Q & A

More Related Content

JVM 初探