JVM内存模型
2020-05-22 07:36:25 39 举报
JVM内存模型
作者其他创作
大纲/内容
运行时数据区(内存模型)
class Math { public static final Integer CONSTANT = 222; public int compute() {// 一个方法对应一块帧栈内存区域 int a = 1; int b = 2; int c = (a + b) * 10; return c; } public static void main(String[] args) { Math math = new Math(); math.compute(); Math math2 = new Math(); math2.compute(); }}
程序计数器(记录的当前执行的或正要执行指令码的行号)
本地方法栈native修饰底层是C实现
操作数栈
执行引擎
堆
From(1/10)
虚拟机
年轻代
本地方法栈
1
局部变量表
To(1/10)
方法出口
jdk8前永久代,jdk8元空间 通过类装载子系统把字节码加载到方法区
栈(线程)通过指针对堆对象的引用
From和To满了后会相互移动,每移动一次加1,直到15时会移到老年代
老年代
math
math2
java Math.class
Eden(8/10)
Eden元区满后,执行引擎会执行minor gc
线程-main
动态链接
方法区(元空间)常量+静态变量+类元信息
full gc
Math.class类元信息
a=1
每一个线程都有自己的程序计数器
直接内存(物理内存,不是分配的内存)
当前栈帧-compute()
c=30
b=2
类装载子系统
栈帧-main()
栈(存放线程) FILO
先把变量存入操作数栈再把变量a=1压入局部变量表
Survivor区
存放的是方法类元信息JVM代码的地址的指针
0 条评论
下一页