JVM整体结构及内存模型
2022-01-04 21:43:27 0 举报
JVM整体结构及内存模型(学习中)
作者其他创作
大纲/内容
Math.class
老年代(2/3)
运行时数据区(内存模型)=JDK8
多线程执行 B线程执行时,如果A线程优先级高,需要先挂起B线程,A线程执行结束后,B线程根据程序计数器的值继续执行程序
b=2
方法区(元空间)常量+静态变量+类信息
符号引用和直接引用在运行时进行解析和链接的过程
OOM
Eden(8/10)
栈(线程)
简单理解 代码内存地址指针位置
a=1
FILO 先进后出
FILO
将常量压入操作数栈
this
程序计数器=10
s0(1/10)
minor gc
STW
本地方法栈
在minor gc过程中对象挪动后,引用如何修改?
Java Math.class
compute()-栈帧
堆
年轻代
user
c=30
线程2
math
方法出口
Survivor区
动态链接
main()-栈帧
main线程
执行
程序计数器
修改
15
类装载子系统
对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。minor gc在根扫描过程中会记录所有被扫描到的对象引用(在年轻代这些引用很少,因为大部分都是垃圾对象不会扫描到),如果引用的对象被复制到新地址了,最后会一并更新引用指向新地址。
JVM虚拟机
字节码执行引擎(c++)
指针引用
本地方法栈(native c++)
JVM整体结构及内存模型
局部变量表
栈(线程)
s1(1/10)
一个方法对应一块栈帧内存区域
操作数栈
直接内存
full gc
程序计数器解释
0 条评论
下一页