Java内存空间与垃圾收集器
2021-01-15 22:28:37 2 举报
Java虚拟机内存模型与垃圾收集器
作者其他创作
大纲/内容
运行时常量池
1.8移入Java堆
(native方法)栈帧
线程1-Java虚拟机栈
即时编译器编译后的代码缓存
CMS标记-清除 用于服务器端以最短回收停顿时间为目标
线程1-程序计数器
栈帧
运行时常量池(动态性)
本地内存(直接内存)
字段表
回收Java堆:分代收集理论+标记清除算法+标记复制算法(新生代)+标记整理算法(老年代)
字面量:如文本字符串
ParNew新生代Serial的多线程并行版
线程2-程序计数器
静态变量
索引集合(类、父类、接口)
对象
符号引用:如包名、类和接口全限定名、变量和方法名和描述符
nio使用的DirectByteBuffer
类型指针指向对应的Class对象
回收方法区:回收常量和类型卸载(苛刻)
G1基于region的堆内存布局停顿时间可控Java9+服务器端模式默认
常量池表
Mark Word:哈希码、GC年龄、锁状态、线程锁、偏向线程ID和时间戳
本地方法栈
属性表
数组
类型指针:直接指针或句柄
方法区(1.8前称为永久代,1.8替换为元空间)
Parallel Scavenge 新生代(吞吐量优先)Java6-8服务器端模式默认
线程2-Java虚拟机栈
类型信息
Serial Old老年代客户端模式默认
对象的引用
Parallel Old老年代Java6-8服务器端模式默认
来源一:预置入Class文件的常量池表中的常量
对象头(若为数组,还有数组长度)
Serial新生代 单核小内存首选客户端模式默认
部分经典垃圾收集器
动态连接
Shenandoah & ZGC基于region的堆内存布局(ZGC)染色指针低延迟垃圾收集器
Java虚拟机管理的运行时数据区域
基本数据类型
实例数据(也包括父类的字段)
1.8移入本地内存
...
类型信息(Class对象)
来源二:运行期间新生成的常量
Java堆(主要的垃圾回收区域)
方法表
魔数+类的版本号
常量池表中的常量在类加载时放入运行时常量池中
对齐填充
返回地址
局部(本地)变量表
访问标志
操作(数)栈
收藏
0 条评论
下一页