认识Java虚拟机的基本结构
Java虚拟机的架构
- 类加载子系统:加载Class信息,存放于称为方法区的内存空间
- 方法区:存放类信息,存放运行时常量池信息,包括字符串字面量和数字常量
- Java堆:虚拟机启动时建立,存放Java对象实例
- 直接内存:Java堆外的,直接向系统申请的内存区间,速度会优于Java堆,大小不会直接受限于Xmx指定的最大堆大小,但系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给定的最大内存
- 垃圾回收系统:可以对方法区,Java堆和直接内存进行回收
- Java栈:每一个Java虚拟机线程都有一个私有的Java栈,一个线程的Java栈在线程创建的时候被创建,Java栈中保存着帧信息,局部变量,方法参数,同时和Java方法的调用、返回密切相关
- 本地方法栈:用于本地方法的调用(通常使用C编写)
- PC寄存器:每个线程私有的空间,Java虚拟机会为每一个Java线程创建PC寄存器。在任意时刻,一个Java线程总是在执行一个方法,这个正在被执行的方法称为当前方法。如果当前方法不是本地方法,PC寄存器就会指向当前正在被执行的指令,如果当前方法是本地方法,那么PC寄存器的值就是undefined
- 执行引擎:Java虚拟机核心组件之一,负责执行虚拟机的字节码