jvm模型图
2024-10-16 11:25:06 1 举报
康师傅jvm课程
作者其他创作
大纲/内容
程序计数器Program Counter Register
支配树
getClassLoader()
long m
链接(Linking)
OutOfMemoryError:Java heap space
类索引[this_class]
内存泄漏
访问标志[access_flags]
堆Heap
解释方式执行
next
压栈
结果
运行时常量池
Y
...
其他元素
getClass()
扩展类加载器
GC Roots
long
Java栈
C
4
GC Root Set
····
本地方法栈Native Method Stack
中间代码
wait(long)
S1区
引导类加载器
JVM运行时数据区
可回收对象
3
object7
new Person();
计数是否超过阈值?
域信息
hashCode()
符号表
wait()
JIT编译器
ThreadLocal
1
car1
准备Preparation
堆内存
car3
将Reference入栈
动态链接
操作局部变量表、操作数栈
GC线程
Eden8/10
CA
0
equals(Object)
常量池计数器[constant pool count]
程序计数器
clone()
16
A
方法区(概念)永久代(PermGen实现)
操作数栈
栈帧-4
加载阶段
short
局部变量表
到对象类型数据的指针
float
Extension ClassLoader
线程共享
字节码生成器
即时编译结束
OutOfMemoryError:Metaspace
扩展类加载器Extersion ClassLoader
S0区
对象X引用对象YX的生命周期长于Y的生命周期Y生命周期结束后,垃圾回收不会回收Y对象
栈帧-2
P
object1
X
验证
15
魔数[magic]
自定义类加载器
Old Gen
方法区
源代码
int
...-Defined ClassLoader
应用线程
解析
虚拟机栈Java Virtual Machine Stack
JVM
系统类加载器/应用程序加载器
s1局部变量
流
G
SimpleHeap类及其方法实现
Eden区
Java源码级编译器
toString()
Finalizel()
执行编译后的机器码
机器指令
8
Non reachableObjects -> Garbage
栈帧1
Java虚拟机栈
object6
person
本地内存
堆(Heap)
JIT代码缓存
23
年轻代(YoungGen):新生代(1/3)堆空间
getGlass()
执行引擎
s2实例
再次触发YoungGC,清理Eden区和S0区未幸存的对象,Eden区幸存下来和S0幸存的对象放入S1区,若Survivor区空间满,对象会直接分配到Old区(分配担保)
rc=2
已编译?
Old区
向上委托
当幸存者区对象的年龄达到15,被放入Old区,Old区内存不足会触发Major GC,Old区触发Major GC后依然没有空间可分配会产生OOM异常
... ...
类信息Demo1
字节码文件
本地方法栈
hardChoice(QQ)
栈帧-3
rc=1
Survivor 0(from)1/10
s2局部变量
方法调用计数器加1
N
出栈
Code Cache
B
TLAB分配
虚拟机栈
索引
当前线程
方法区Method Area
constant_pool_count个cp_info结构
Car Class
存活对象
object2
线程独占部分
当前栈帧
主版本号[major_version]
FE
加载Loading
ClassLoader
虚拟机内存
机器无关优化
加载信息到方法区
Person
方法信息
interface_count个interface信息
系统类加载器Application ClassLoader
类加载子系统
是
double
常量池数据区
2
System ClassLoader
运行时常量池字符串常量
提交编译请求
car2
类型信息
初始化
.class
object3
D
new对象Eden区空间满,触发YoungGC,红色代表被销毁的对象,绿色代表幸存下来的对象,幸存的对象年龄增1,放入Survivor 0区
.class字节码
Reachable Objects
hardChoice(360)
int k
JVM字节码
HOT?热点代码统计分析
解析Resolution
Stop The World
对象类型数据
方法返回值
参数
User-Defined ClassLoader
StackOverflowError
Bootstrap ClassLoader
JAVA堆
iadd执行后
自定义类加载器Custom ClassLoader
检测是否加载
语法分析器
Eden空间
对象引用图
6
线程私有
Java方法入口
语义分析器
Parallel
Forgotten Reference-> Momory Leak
验证Verification
父类加载失败交由子加载器自己处理
运行时数据区(Runtime Data Area)
String Table
E
否
JDK8
object4
F
对象实例化
目标代码
BE
Object类型数据
JIT动态编译
接口计数器[interfaces_count]
堆
cp_info
更新PC计数器
PC寄存器
s1实例
Java堆区
编译
元空间
Y-生命周期
5
Java堆
方法调用
堆(heap)
栈帧-1
Car实例
链接阶段
H
Father类型数据
Son类型数据
串行(Serial)VS 并行(Parallel)
准备
副版本号[minor_version]
加载并初始化
字节码
方法区(概念)
类型
词法分析器
语法树/抽象语法树
Concurrent
···
STW(Stop-the-world)VS 并发(Concurrent)
初始化Initialization
X-生命周期
\"null\"
栈帧n
object5
父类索引[super_class]
.java源代码
Byte Code
后台执行编译
字节码解释器
Notify()
BA
double q
extends
线程共享部分
老年代(OldGen):老年代(2/3)堆空间
接口信息数据区
Token
机器相关优化
Survivor 1(to)1/10
指令:javap -v PCRegisterTest.class
目标代码生成器
栈顶帧
内存区域
静态变量
Car.class
对象实例数据
Java虚拟机执行引擎
注释抽象语法树
栈帧2
系统类加载器
实例化
Serial
启动类加载器Bootstrop ClassLoader
类加载步骤(加载、解析、初始化)
reference
这里的四个加载器之间的关系是包含关系。不是上层下层,也不是子父类的继承关系
CPU
寄存器分配器
float p
Optional可选择的
Object t
Java栈本地变量表
Eden分配
解释器
=
方法返回
0 条评论
回复 删除
下一页