Sun HotSpot | ||||
内存区域 | 用途 | 线程 | 异常 | |
程序计数器 (Program Counter Register) | 当前线程所执行字节码的行号指示器 | 线程私有 | 不会抛出OOM | |
Java虚拟机栈 (Java Virtual Machine Stacks) | 描述方法执行的内存模型:每个方法在执行时创建一个栈帧(Stack Frame)(方法运行时的基础数据结构),用来存储局部变量表、操作数栈、动态链接、方法出口等信息。 | 为Java方法服务 | 线程私有 | 如果线程请求的栈深度大于虚拟机所允许的深度,抛出SOF; 如果虚拟机栈可以动态扩展,当扩展时无法申请到足够的内存,抛出OOM |
本地方法栈 (Native Method Stack) | 为Native方法服务 | 线程私有 | ||
Java堆 (Java Heap) | 存放对象实例 | 线程共享 | 如果堆中没有内存完成实例分配,并且堆也无法再拓展时,抛出OOM | |
方法区 (Method Area) | 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 | 线程共享 | 当方法区无法满足内存分配需求时抛出OOM | |
运行时常量池 (Runtime Constant Pool) | 方法区的一部分,用于存放编译期生成的各种字面和符号引用 | 线程共享 | 当常量池无法再申请到内存时会抛出OOM |