JVM 的组成及各部作用
2022-10-26 20:59:46 0 举报
JVM 的组成及各部作用
作者其他创作
大纲/内容
PC Registers for Thread N
Program Counter Register
热点代码及探测,目前HotSpot VM所采用的热点探测方式是基于计数器的热点探测
本地方法栈是为虚拟机使用到的Native方法服务。虚拟机规范中对本地方法栈中的方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。甚至有的虚拟机(譬如Sun HotSpot虚拟机)直接就把本地方法栈和虚拟机栈合二为一。与虚拟机栈一样,本地方法栈区域也会抛出StackOverflowError和OutOfMemoryError
一些其他信息
栈帧(对应当前方法)
方法区 Method Area
线程2 Thread2
方法表
新生代 Young Generation
Eden
将一个类中所有被static关键字标识的代码统一执行一遍。如果执行的是静态变量,那么就会使用用户指定的值覆盖之前在准备阶段设置的初始值;如果执行的是static代码块,那么在初始化阶段,JVM就会执行static代码块中定义的所有操作。
初始化 Initialization
启动类加载器 Bootstrap ClassLoader$JAVA_HOME/jre/lib 里的jar |C编写
复制算法
运行时数据区 Runtime Data Areas
垃圾判断
Class文件
栈针 Stack Frame (类方法)
扩展类加载器 Extension ClassLoader$JAVA_HOME/jre/lib/ext 里的 jar | 继承
加载 Loading
MetaSpace元空间(不属于堆,但与堆共享内存)
程序计数器保存当前正在执行的JVM指令的地址。每个线程都有它自己的PC寄存器(私有)
连接阶段 Linking
堆 Head
线程1 Thread1
操作数栈 Operation Stack
应用类加载器 Application ClassLoader项目中编写的类 | 继承ClassLoader
自定义类加载器重写ClassLoader的 findClass()
PC Registers for Thread 1
局部变量表 Local Variable
各个线程共享的内存区域。1.8以前对应永久代,1.8以后对应元空间。元空间使用的是本机的剩余内存。
垃圾回收
可达性分析
Survivor from
方法信息
指向类加载器的引用
验证 Verification是否符合JVM规范。是否是一个有效的字节码文件,涵盖格式验证、语义分析、操作验证等
Survivor to
准备 PreParation为类中的所有静态变量分配内存空间,并为其设置一个初始值,final直接赋予原值
动态链接 Dynamic Link
标记-清除算法
【JIT(Just In Time Compiler)】:即时编译器目的是避免函数被解释执行,而是将整个函数体编译成为机器码,每次函数执行时,只执行编译后的机器码即可,这种方式可以使执行效率大幅度提升
字段信息
类变量(静态变量)
引用计数法
本地库接口Native Method Interface
本地方法库Native Method Library
解释器 interpreter转换成最终的机器码
解析 Resolution静态绑定的会被解析,动态绑定则只会在运行时进行解析
方法返回地址Return Address
老年代 Old Generationn
动态链接是链接的运行时常量池
NO OOM
类型的常量池
虚拟机栈 VM Stack(私有)
分代收集算法
执行引擎 Execution Engine
运行时常量池RuntimeConstantPool
类型信息
类的加载
标记-整理算法
指向Class实例的引用
本地方法栈 Native Method Stack
垃圾回收(Garbage Collection,GC)
分代:不同代使用不同的垃圾回收算法
0 条评论
下一页