01. 内存结构
JVM 内存结构

-
堆(Heap
) :所有的对象实例和数组,根据虚拟机规范的规定,Java 堆可以是固定的大小也可以是按照需求动态扩展的,而且不需要保证是连续的。 -
元空间(Metaspace
) :类的结构信息,如类的字段、方法、接口、构造函数,还有运行时常量池等。在Java 8 之前,PermGen 是存放在堆中,在Java 8 之后,PermGen 被Metaspace 替代,并且Metaspace 直接存放在原生内存,而不再是堆中。 -
程序计数器(Program Counter Register
) :如果线程执行的是一个Java 方法,那么寄存器里面记录的就是正在执行的虚拟机字节码指令的地址,如果线程执行的是一个native 方法,那么寄存器记录的值为undefined 。程序计数寄存器也是虚拟机规范里面唯一一个没有规定任何OutOfMemoryError 情况的区域。 -
虚拟机栈(JVM Stacks
) :局部变量表、操作数栈、方法出口等信息,局部变量表存放了编译时期可知的各种基本数据类型、对象引用和指向了一条字节码指令的地址。 -
本地方法栈(Native Method Stacks
) :局部变量表、操作数栈、方法出口等信息。

除此之外,还有
如果线程清求的栈深度大于虚拟机所允许的深度,将抛出