JVM内存模型和线程模型
2023-01-29 11:16:16 0 举报
JVM内存模型和线程模型
作者其他创作
大纲/内容
1: istore_1:弹出栈顶int数值存入局部变量表第一个变量量给a赋值。数据出栈
private int g1=2;
程序计数器:一个指针,用来存放程序将要执行地址(下一条指令地址)
From区【1/10】
300
6: iadd:栈顶弹出两个int数字相加,并把结果在入栈
a
这里是个环,当From满了发生轻GC释放对象把还存活的放入To,当To也满了发生轻GC释放对象把还存活的在放入From,然后自己变成From原来的From变成To,一次类推,当超过15个轮回还有存活的对象就会放入老年区
1:通过限定名活动类的二进制文件流2:把文件流所代表的静态存储结构转化为方法区的运行时数据结构3:在内存生成一个代表这个类的java.lang.Class对象对象,作为方法区这个类的各种数据访问入口,这个对象不一定在堆里面,但是对于HotSpot虚拟机而言这个对象放在方法区
java栈
方法编译对照
11: iload_3:将局部变量表第三个变量的值拷贝入栈
Survivor space
JVM内存模型
类加载--解析
动态链接
当程序在java栈方法的栈帧中操作时候,程序计数器一直执行将要执行的代码指令,比如在本地变量表和操作数栈操作数据的时候
To区【1/10】
7: bipush 100:将100推入栈顶
Eden【伊甸园区】【8/10】当伊甸园满了后会发生轻Minor GC,释放掉不用的对象,然后把存活的对象放入From区
编译
本地标量表
private final int z1=1;
类加载--加载
2
1:将class常量池的的数据结构转化为方法区的运行时常量池2:运行时常量池:
private final static String z2=\"aaa\";
线程1
10: istore_3弹出栈顶int类型的数值放入到局部变量表的第三个标量
JVM内存模型和线程模型
本地方法栈:登记的native方法
2: iconst_2:int型常量2入栈
类内存分配
方法出口
3: istore_2:弹出栈顶int数值存入局部变量表第二个变量量给b赋值。数据出栈
12: ireturn:返回栈顶的int值
b
操作数栈
javac编译
在java运行时数据区中,堆和方法区是所有线程共享的,但是java栈,本地方法栈和程序计数器是线程私有,
操作数栈:后进先出,下面的数据只是量程数据并不是说数据一直在操作数栈中,需要安装操作步骤看,出栈的数据不再在保存到操作数栈中,
MetaData:常量池,类信息类的static变量,即使编译器编译后的代码等数据
3
运行时数据区(内存)
1
类加载--准备
9: imul:栈顶弹出两个int数字相乘,并把结果入栈,【注意这里的程序号是9,是因为bipush 100,中100要占用一个位置】
1:类中的静态变量分配内存空间,(被static修饰的变量)【而实例变量会在对象初始化的时候,跟随对象一起分配在java堆中】2: 当一个变量同时被static和final所修饰的时候,在准备阶段就会为这个变量赋予指定的值
0: iconst_1:int型常量1入栈
.class
java栈:java执行方法的内存模型,每次方法运行的时候创建一个栈帧,栈帧包含(局部变量表,操作数栈,动态链接,方法出口),不存在GC,线程结束立即销毁
本地方法库
本地方法栈
本地方法接口
4: iload_1:把局部标量表中第一个变量值拷贝入栈,就是把a的值拷贝到操作数栈中
类加载器
方法区:类的所有字段和方法的字节码,静态变量+常量+类信息(构造函数,接口定义)+运行时常量池
操作数帧
5: iload_2:把局部标量表中第二个变量的值拷贝入栈,就是把b的值拷贝到操作数栈中
ZzlTest类
Tenured space:老年区如果这里在满了就会发生Full GC,很多虚拟机的Full会停止进程释放资源,JVM优化的重点
堆:用来存放对象实例,几乎所有对象的实例都在对上面分配内存
c
线程计数器
.java
局部变量表
main()方法的栈帧
方法出口:包含了方法返回值,进入位置等信息
public void checkZZl(){ final int z3=7; int t=g1+z3; StZzlTest aaa=new StZzlTest(); aaa.add(); System.out.println(t); System.out.println(z1+z2+z3); ZzlTest.toZZl(); }
占用堆空间的2/3这里是老年区,当老年区满了就会发生Full GC
1:当一个java文件被编译成成为一个.class文件后,会生成一个Class常量池2:Class常量池(存放字面量和符号引用)3:字面量:如文本字符串、被声明为final的常量值4:符号引用:符号引用是一组符号来描述所引用的目标
执行引擎
直接使用物理机内存
JVM线程模型
占用堆空间的1/3这里是新生区
Survivor space超过15个轮回
add()方法的栈帧
堆流程
收藏
0 条评论
下一页