JVM的内存布局
2021-05-18 23:04:00 0 举报
java内存结构布局,内存分配以及垃圾回收过程,垃圾回收器和垃圾回收算法关系
作者其他创作
大纲/内容
否
应用线程3
用户线程2
OOM
Young区(新生代)-Xmn
Safepoint
栈帧 - 2(方法B)
用户线程1
CPU1
Metaspace(元数据区)-XX:PermSize -XX:MaxPermSize
栈帧 -3....方法C......
未使用
YGC
分配对象内存
是
筛选回收
旧对象
ParNew(多线程)
FGC标记 - 整理
并发清理
最终标记
Native Method Stacks(本地方法栈)
初始标记
并发标记
Survivor放得下?
GC 线程3
回收前
重新标记
JVM内存布局
G1回收模型内存布局
方法元信息
复制算法
用户线程4
应用线程2
晋升至老年代
Eden放得下?
常量池
GC线程
保留区域
操作栈
存活对象
标记 - 整理
class类元信息
局部变量表
老年代采取标记 - 整理算法暂停所有用户线程
Old区放得下?
CPU2
动态连接
Servial收集器
ParNew /Serial Old收集器
用户线程3
CMS 收集器
S1
放置在S0/S1区域
CodeCacheJIT编译产物
对象存活超过阈值?
FullGC
E
S
O
H
新生代采取复制算法,暂停所有用户线程
CPU3
Program Counter Register(程序计数器)
回收前状态
Servial收集器(单线程)
回收后
CPU0
方法返回地址
Old放得下?
GC 线程1
Eden
可回收对象
S0
可回收
新对象申请内存
栈帧 - 1(方法A)
回收后状态
Heap(堆区)-Xms -Xmx
应用线程1
Stop the world
JVM Stacks (虚拟机栈)-Xss
对象分配与简要的GC流程
JDK 9 开始使用 G1收集器
Eden区
Survivor
Old
Humongous
GC 线程2
Old区(老年代)
YGCMark-Copy
0 条评论
回复 删除
下一页