1.jvm结构
2.jvm 结构 简介
2.1 栈 (stack)
作用:主管 Java 程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。
特点: 栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器 JVM 直接对虚拟机栈的操作只有两个:每个方法执行,伴随着入栈(进栈/压栈),方法执行结束出栈 栈不存在垃圾回收问题 栈中可能出现的异常: Java 虚拟机规范允许 Java虚拟机栈的大小是动态的或者是固定不变的 如果采用固定大小的 Java 虚拟机栈,那每个线程的 Java 虚拟机栈容量可以在线程创建的时候独立选定。如果线程请求分配的栈容量超过 Java 虚拟机栈允许的最大容量,Java 虚拟机将会抛出一个 StackOverflowError 异常 如果 Java 虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那 Java 虚拟机将会抛出一个OutOfMemoryError异常 可以通过参数-Xss来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度。
官方操作
StackOverflowError 异常
public class Test {
public static void main(String[] args) {
Test test=new Test();
test.testStackOverflowErrorA();
}
public void testStackOverflowErrorA(){
this.testStackOverflowErrorA();
}
}
2.2 堆(heap)
2.3. 本地方法栈(native program method)
2.4. pc寄存器 (Porgram Counter Register)
JVM 中的 PC 寄存器是对物理 PC 寄存器的一种抽象模拟。 每个线程 会有 一个pc寄存器 ,占用较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。
2.5.元空间 (非堆)
用于存储类结构信息的地方,包括常量池、静态变量、构造函数等。虽然JVM规范把方法区描述为堆的一个逻辑部分, 但它却有个别名non-heap(非堆)