JVM内存模型详细版
2020-06-01 11:54:50 0 举报
JVM内存模型详细版
作者其他创作
大纲/内容
动态链接
heap 堆
方法区(非堆区)
栈帧3
类加载器子系统Class Loader Subsystem(类加载、链接、初始化)
拓展类加载器
新生区young generation
验证
1、加载:在硬盘上查找并通过IO读人字节码文件
程序计数器(线程私有):就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),有执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。
xxx.java(java源文件)
本地方法栈(native method stack)
5、解析:类装载器装入类所引用的其他所有类
加载阶段
解析
eden(8/10)伊甸区
准备
老年代old generation
程序计数器(program counter)
启动类加载器
发vsfdb
方法出口
xxx.class(java字节码文件)
直接内存(元空间)metadata space
程序计数器Program Counter Register
局部变量表
加载
幸存者区(Survivor space)
虚拟机栈VM Stack
堆Heap
执行引擎
本地库接口Java Native Interface
链接阶段
3、验证:校验字节码文件的正确性
xxx.java(java源文件)
from(1/10)
系统类加载器
栈帧2
本地方法栈Method Area Stack
操作树栈
to(1/10)
xxx.class(字节码文件)
垃圾收集Garbage Collection
类加载机制
4、准备:给类的静态变量分配内存,并赋予默认值
初始化
运行时数据区 Runtime Data Area
栈帧1
2、链接:执行验证、准备、解析(可选)步骤
tenured space
自定义类加载器
6、初始化:对类的静态变量初始化为指定的值,执行静态代码块
虚拟机栈
编译器生成
线程私有数据区域
方法区Method Area
双亲委派机制:类模板加载会向上委派,父类处理失败交回给子类处理
本地方法库
本地方法接口native interface
本地方法库Native Method Libraries
metadata
初始化阶段
1、当一个方法开始执行之后,只有两种方式可以退出这个方法2、第一种方法时执行引擎遇到任意一个方式返回的字节码指令,这时候可能会有返回值传递给上层的方法调用,是否有返回值以及返回值的类型根据遇到的方法返回字节码指令来决定,这种退出方式成为正常完成出口。3、另一种退出发方式是在方法执行的过程中出现了异常,并且这个一场没有在方法体内得到处理,jvm内部产生的异常处理器,就会导致方法退出,这种退出方式成为异常完成出口。此种情况下,方法时不会给上层调用者返回任何值4、无论采用何种退出方式,在方法退出之后,都需要返回到方法被调用的位置继续执行,方法返回时可能需要在栈帧中保存一些信息,用来帮助恢复它的上层方法的执行状态。5、方法退出时可能执行的操作有:恢复上层方法的局部变量表和操作数栈、把返回值压入调用者栈帧的操作数栈中,调整PC计数器的值以指向方法调用指令后面的一条指令地址。
线程共享数据区域
本地方法栈(线程私有):登记native方法,在Execution Engine执行时加载本地方法库
即使编译器JITCompiler
收藏
0 条评论
回复 删除
下一页