Java虚拟机运行时数据区:
相关区域介绍:
程序计数器:
功能:当前线程所执行字节码的行号指示器。若是Java方法记录指令地址,若为Native方法,则不记录
隔离性:线程隔离
Error:无
Java虚拟机栈:
功能:描述Java方法执行的内存模型:每个方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
隔离性:线程隔离
Error:线程请求的栈深度大于虚拟机所允许的深度时,抛出 StackOverflowError 异常;
动态扩展时无法申请到足够的内存,抛出 OutOfMemoryError 异常。
局部变量表:局部变量表所需的内存空间在编译期间分配,包含各种基本数据类型,及对象引用。
本地方法栈:
功能:为虚拟机使用到的Native方法服务。(虚拟机栈为Java方法(也就是字节码)服务)
隔离性:线程隔离
Error: StackOverflowError 和 OutOfMemoryError
Java堆:
功能:存放对象实例
隔离性:线程共享
Error:OutOfMemoryError
细分:内存回收的角度:新生代、老生代
内存分配的角度:Java堆中可能划分出多个线程私有的分配缓冲区。
虚拟机限制:不需要连续内存空间,可以固定大小也可扩展
方法区:
功能:存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码等。
隔离性:线程共享
Error:OutOfMemoryError
虚拟机限制:不需要连续内存空间,可以固定大小也可扩展;此区域内存的回收主要针对常量池的回收和对类型的卸载。
运行时常量池:方法区的一部分
功能:用于存放编译期生成的各种字面量和符号引用,及翻译出来的直接引用
特性:动态性,运行期间也可以将新的常量放入池中。
Error:OutOfMemoryError