jvm内存模型
2021-05-17 23:07:41 0 举报
全面
作者其他创作
大纲/内容
是
load,store变量
并发标记
最终标记STW
扩展类加载器ExtClassLoader
年轻代
垃圾收集器
public static int add(){ int a = 10; int b = 1; int c = a+b; return c;}
否
应用线程
栈帧1add()
标记清除
栈帧2 main()
标记复制
b=1
查看是否配置-XX:-HandlePromotionFailure
向上委托
minor GC回收年轻代
程序计数器记录每个方法执行到字节码文件的位置
元空间(方法区)存放常量,静态变量和类信息
操作数栈程序执行计算过程临时存放计算数的,操作变量表中的变量数据
局部变量表
并发重置
c=11
局部变量存放到局部变量表中,不赋值,由操作数栈操作完数据给变量赋值,对象指向堆内存中内存地址
栈(线程)每个方法执行都开辟独立的栈帧空间存放局部变量信息
safepoit
.class类
判断老年代可用空间大于历史每次minor gc后进入老年代对象大小的平均值
老年代占堆内存(2/3)对象在survivor区复制年龄达到默然认值15,复制到老年代,Eden区放不下的大对象直接放到老年代,一次minor gc后对象大于survivor区的50%放到老年代
eden(8/10)一次minor gc后Eden和s0区存活的对象复制到s1区,下次gc就是Eden和s1区存活的对象复制到s0区
类加载器
老年代
public static void main(String[] args){ add();}
分代收集
堆
堆空间存放对象实例
parallel
old
筛选回收STW
minorGC执行之前判断老年代可用空间是否大于年轻代所有对象包括垃圾对象的大小
动态链接符号引用转换内存地址
hunmogous
程序计数器
parallel old
.......
引导类加载器加载失败再由子加载加载
方法出口add()方法执行完后回到main()方法的位置
局部变量
标记整理
G1将Java堆划分为多个大小相等的独立区域(Region),JVM目标是不超过2048个Region相较于CMS优点空间整合:与CMS的 标记--清理算法不同,G1从整体来看是基于标记-整理算法实现的收集器;从局部上来看是基于复制算法实现的可预测的停顿:G1建立了可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段(通过参数-XX:MaxGCPauseMillis指定)内完成垃圾收集
survivor区
G1
并发标记
自定义加载器
G1 标记整理算法
重新标记 STW
eden
应用程序加载器AppClassLoader
GC算法
字节码执行引擎
a=10
操作栈
CMS线程
本地方法区主要存储程序执行所依赖的底层c++代码变量信息
每个方法线程都有独立的栈空间FILO
JVM内存模型1.8
parNew
初始标记STW
ZGC
full GC触发回收整个堆空间
并发清理
serialOld
sorvivor
双亲委派
CMS 标记清除算法
cms
serial
初始标计 STW
s11/10
执行方法
s01/10
引导类加载器BootstrapLoader
对象变量指向堆内存地址
0 条评论
回复 删除
下一页