JVM虚拟机相关图
2021-08-29 13:15:36 25 举报
学习JVM的时候画的图
作者其他创作
大纲/内容
晋升老年代
线程隔离的数据区
系统类加载器
string constants
验证
Extension Class Loader
线程共享
域信息
Tenured/Old
NativeStack
1
线程共享部分
堆
是
准备
方法区(概念)
16
栈帧
Y
引导类加载器
新对象申请内存过程
Java栈本地变量表
Java虚拟机运行时数据区
User Defined Class Loader
堆 heap
类信息Demo1
Servivor放得下?
Eden
S0(from)
超大对象
本地方法栈Native Method Stack
运行时数据区总结
线程私有
类加载器的种类
结果
Metaspace(元数据区)
JDK8
自定义类加载器
静态变量
TLAB分配
程序计数器
方法区(概念)永久代(PermGen实现)
到对象类型数据的指针
局部变量表
s1局部变量
JIT代码缓存
S1(to)
Method Area
运行时常量池字符串常量
float
否
解析
Young区(新生代)
Thread
short
本地内存
方法返回地址
N
伊甸园(Eden)
Java虚拟机栈
String Table
类信息
PC Register
检测是否加载
方法1
S0
方法区
name and type
类加载子系统
Stack Frame
操作数栈
对象实例化
S1
method references
CodeCacheJIT编译产物
幸存者1区
元空间(Metaspace实现)
OOM
新生代(Young/New generation)
s2局部变量
一些附加信息
虚拟机栈VM Stack
放置在S0/S1区
System Class Loader
.class 字节码
类加载机制{加载、解析、初始化}
堆内存
. . .
老年代
StackOverflowError
从线程共享与否的角度看内存
15
将Reference入栈
方法2
Old放得下?
栈帧3
链接阶段
JDK7
编译
Person person = new Person();
class references
Java栈
对象分配过程TLAB
Optional
Double
栈帧-1 (方法A)
方法信息
动态链接
reference
加载信息到方法区
内存区域
本地方法库
永久代/元空间
虚拟机栈
s2实例
由所有线程共享的数据区
YGC
对象存活超过阈值?
分配对象内存
栈帧1
本地方法栈
YGC/Minor GC
堆空间
方法3
执行引擎
Eden放得下?
Class类元信息
本地库接口
对象类型数据.class
元空间
OutOfMemoryError : Metaspace
加载阶段
字节码文件
线程私有部分
JDK6
Return Value
运行时常量池
老年代(Tenure / Old Generation)
运行时数据区
. java源代码
类型信息
初始化
Old区(老年代)
堆、栈、方法区的交互关系图解
堆内存结构
ThreadLocal
方法元信息
field references
Java 堆
OperandStack
程序计数器Program Counter Register
numberic contents
OutOfMemoryError : Java heap space
Stack
FullGC
Java 栈
JDK的变化
常量池
对象实例数据
Current ClassConstant PoolReference
堆Heap
int
Java堆
扩展类加载器
JVM运行时数据区
Eden 分配
2
Byte Code
堆 Heap
初始化阶段
栈帧2
栈帧-2 ( 方法B )
更新PC计数器
。。。
Eden区
Heap
Bootstrap Class Loader
幸存者0区
栈帧-3...
类及其方法的实现
invoke dynamic
伊甸园区
s1实例
新对象申请
方法区Method Area
方法区 .class
Local Variables
0 条评论
下一页