运行时数据区 | |||||
区域名称 | 创建时期 | 线程共享 | 内存分配方式 | 存放数据 | 异常情况 |
PC寄存器 | 否 | 固定 | Java虚拟机正在执行的字节码指令地址 | ||
Java虚拟机栈 | 创建线程时创建 | 否 | 固定或动态 | 存储局部变量和一些过程的结果 | 1、如果线程请求分配的栈容量超过了Java虚拟机栈允许的最大栈容量将会出现StackOverflowError 2、如果Java虚拟机栈动态扩展,当无法申请到足够的内存,或者创建线程时没有足够内存去创建虚拟机栈,将会出现OutOfMemoryError |
Java堆 | 虚拟机启动时创建 | 是 | 固定或动态 | 类实例或数组对象 | 如果实际所需的堆超过了自动内存管理系统能提供的最大容量,那 Java 虚拟机将会抛出一个OutOfMemoryError 异常 |
方法区 | 虚拟机启动时创建 | 是 | 固定或动态 | 存储类结构信息 | 如果方法区的内存空间不能满足内存分配请求,那 Java 虚拟机将抛出一个OutOfMemoryError 异常。 |
运行时常量池 | 类和接口被加载到虚拟机时 | 当创建类或接口的时候,如果构造运行时常量池所需要的内存空间超过了方法区所能提供的最大值,那 Java 虚拟机将会抛出一个 OutOfMemoryError 异常。 | |||
本地方法栈 | 线程创建时分配 | 否 | 固定或动态 | 1、如果线程请求分配的栈容量超过本地方法栈允许的最大容量时,Java 虚拟机将会抛出一个StackOverflowError 异常。 2、如果本地方法栈可以动态扩展,并且扩展的动作已经尝试过,但是目前无法申请到足够的内存去完成扩展,或者在建立新的线程时没有足够的内存去创建对应的本地方法栈,那 Java 虚拟机将会抛出一个 OutOfMemoryError 异常。 | |
栈帧 | 方法调用时创建 | 否 | 动态 |
JAVA虚拟机
最新推荐文章于 2023-02-19 11:35:55 发布