JVM内存模型
2019-09-16 14:45:38 0 举报
JVM内存模型
作者其他创作
大纲/内容
当s0存满,将S0中对象移至到S1清空S0S1与S0互转
main()-栈帧
程序计数器Programer Counter Register
7.操作数10压入栈
CPU缓存
方法出口:记录线程结束后返回到祝线程的代码地址,是程序继续向下执行
main线程
b=2
虚拟机栈JVM Stack
局部变量
线程栈
CPU寄存器
9.操作数10,3出栈进行计算,并将结果压入栈
返回地址
a=1
老年代
main 线程
manth线程
S0
以一下代码为例,图示JVM运行原理:class Math{ public static final Interger CONSRANT = 666; public int math() { int a = 1; int b = 2; int c = (a+b)*10 return c; } public static void main(String[] args) { Math math = new Math(); math.math(); }}
8.局部变量c压入栈
线程
经过n次GC后没有被销毁的对象移至S0
S1
变量
FILO
程序计数器:每个线程都有一个独享的Java程序将要运行的下一句语句的内存地址指针
...
a
经过15次GC后(可配置次数)没有被销毁的对象移至老年代
math
动态连接
把b的值装入操作数栈
新生代
b
方法区 (元空间)静态变量常量类元信息
当前计算机内存模型:多核并发缓存架构
2
10.操作数30出栈赋值给变量c
2.局部变量math压入栈
执行引擎
操作数栈
30
注意:GC 的作用区域只有 方法区 和 堆
math()-栈帧
3.math.math()方法运行
2.操作数1出栈赋值给变量a
c=30
7
1
new 的对象
Eden
堆Heap
方法
主内存(RAM)
方法出口GC回收math()栈帧
把a的值装入操作数栈
4.变量b入栈操作数2入栈
类加载器Class Loader
对象实例
Math类元信息
动态链接
1.变量a入栈操作数1入栈
程序计数器
CPU
6.从操作数栈弹出2,1执行加法,并发结果压入操作数栈
老年代存满将进行FullGCFullGC后老年代仍然是满的,则引发内存溢出
3
方法出口
1.main()运行
本地方法栈
10
c
放入Eden
3.变量b入栈操作数2入栈
Java字节码文件Main.class
math对象
11.变量c值压入操作数栈 返回结果
堆
JVM
JVM内存模型
0 条评论
下一页