JVM内存模型
2021-09-08 15:02:25 10 举报
JVM内存模型
作者其他创作
大纲/内容
堆
执行代码,他肯定知道执行到哪个地方
b = 2
栈(线程):就是数据结构的那个栈
compute()-栈帧
程序计数器
1(出栈)
2(出栈)
操作数栈内部也是一个栈结构,临时的一块中转站
2
方法出口
main线程
通过javap -c Math.class 反汇编Math.class去获取这些信息
java Math.class
FILO:先进后出
main()-栈帧
这里是将局部变量加载成int类型值
方法区
① 类装载子系统:c++实现的
栈(线程)
每执行完一行代码,字节码执行引擎会去动态更改这个程序计数器里面的值
30(出栈)
本地方法栈
操作数栈
线程2
imul 执行int类型的乘法操作,同加法
30 (iload操作重新放在了操作数栈)
a = 1
③ 字节码执行引擎:执行代码,c++实现
内存区域堆:new出来的对象栈(线程栈):存放局部变量,只要开启一个线程,jvm会在线程栈内分配一块独立的内存空间,存放在线程执行的过程中需要用到的局部变量,不同的线程都会有一块属于自己的内存空间,开启一个线程就会分配一块内存单独的内存空间存放变量,一个方法对应一个独立的栈帧区域,栈帧把不同的方法隔离开来,用自己独立的空间本地方法栈:方法区:程序计数器:每一个线程都有的,就相当于代码执行到的行数,比如反汇编之后生成的文件中,每一行前面都有一个code,计数器就相当于那个code,为什么要设计一个程序计数器呢?很明显,因为多线程。例:现在有一个线程正在执行代码,此时,另一个优先级比较高的线程抢到了CPU的时间片,之前的线程只能挂起,将来是要恢复的,恢复的时候肯定是不能从头开始执行的,应该从上一次没有执行完的那一步开始。此时就是根据程序计数器里的值来确定从哪里开始执行的。
局部变量表类似于一种数组结构(table)
c = 30
Math.class
动态链接
动态链接:在程序运行的过程中,把符号引用转变为直接引用。
局部变量
程序计数器
JVM虚拟机--JDK8
② 运行时数据区(内存模型)
3(加法之后的结果)
出栈,拿出来放到局部变量中去 就变成a=1
1
同
bipush将一个8位带符号整数压入栈
静态链接:在程序加载的过程中,将符号引用替换为直接引用。该阶段会把一些静态方法(符号引用,比如 main()方法)替换为指向数据所存内存的指针或句柄等(直接引用)
10
同1
this(默认的内置对象)
2 (出栈)
iadd操作就是int类型的加法操作:先把值从操作数栈中取出来,放进CPU内部的寄存器,在CPU内部的缓存里做操作,计算完成后把结果再放进操作数栈中
0 条评论
下一页