JVM相关结构简图
2021-03-12 16:09:24 0 举报
JVM相关结构简图
作者其他创作
大纲/内容
堆结构
虚拟机栈结构
是
字段、方法的数据
Person person = new Person();
float
线程二
栈帧三
int
class文件
放置在S0/S1中
本地方法栈Native Method Stacks
Class 文件字节码
JDK1.8之后,类型信息、域信息、方法信息、常量存放在本地内存的元空间之中
所有类实例和数组
JDK1.7之后,字符串常量池、静态变量存放在堆中
虚拟机栈
OutOfMemoryError(OOM)
reference
栈帧二
字符串常量池StringTable
部分回收:新生代: YGC / Minor GC老年代: Major GC /old GC (目前只有CMS垃圾回收器有老年代回收)整堆回收: Full GC混合回收: Mixed GC 整个年轻代和部分老年代(目前只有G1垃圾回收器支持混合回收)
方法三
-Xss512K: 默认: 1024K
对象分配流程图
老年代
Eden
装载Load
否,年龄+1
YGC(Minor GC)
-Xms20m :默认 系统内存的1/64-Xmx20m :默认 系统内存的1/4-XX:NewRatio=2: 默认1:2-XX:ServivorRatio=8: 默认:8:1:1-XX:-UseAdaptivesizePolicy :关闭自适应的内存分配策略-Xmn100m: 设置年轻代大小: 同时设置NewRatio的话,以Xmn为准
栈帧一
类对象实例
方法区内部结构
Java 虚拟机栈
类型信息
一些其他信息
初始化Initialize
栈管运行堆管存储
操作数栈
验证Verify
链接Link
动态链接
byte
类型信息Demo01...
堆
short
当前栈帧
局部变量表
年轻代
old区是否放得下
方法区(元空间)
S1
新对象分配
运行时数据区Runtime Date Area
否
方法返回地址
解析Resolve
JDK 为什么要取消永久代?1. 永久代使用的内存大小很难确定;2. 对永久代的调优很困难
方法一
年轻代:老年代=1:2Eden:S0:S1=8:1:1
类加载过程
一些其他信息(程序调试支持信息)
运行时常量池
字面量的符号引用
方法区主要放: 类型信息、域(field)信息、及时编译器(JIT)代码缓存、运行时常量池、静态变量、方法信息
double
分配内存
虚拟机栈Java Virtual Machine Stacks
当前正在执行的Java虚拟机指令的地址
晋升老年代
Servivor区是否放得下
栈、堆、方法区之间的关系
方法返回地址(程序计数器存储的值)
方法二
FullGC(major GC)
Eden区是否放得下
方法区Method Area
堆Heap
线程一
JVM内存模型
S0/S1满了不会发生 GC,但会直接将对象分配到 老年代
程序计数器PC Register
准备Prepare
方法区垃圾回收:1. 常量池废弃的常量2. 不在使用的类型信息
方法和构造函数的代码
指向方法区class文件字节码地址
boolean
绿色: 线程共有黄色: 线程独有
S0
是否达到最大年龄阈值
收藏
0 条评论
回复 删除
下一页