异常说明:
StackOverflowError:线程请求的栈深度虚拟机所允许的深度
OutOfMemoryError:如果虚拟机可以动态扩展,扩展时无法申请到足够的内存
名称 | 存放内容/作用 | 线程私有/共享 | 异常类型 | 生命周期 |
---|---|---|---|---|
程序计数器 | 正在执行的虚拟机字节码指令地址 | 私有 | 无 | 与线程相同 |
虚拟机栈 | 局部表量表、操作数栈、动态链接、方法出口等 | 私有 | StackOverflowError、OutOfMemoryError | 与线程相同 |
本地方法栈 | 执行使用到的Native方法服务 | 私有 | StackOverflowError、OutOfMemoryError | 与线程相同 |
Java堆 | 存放对象实例,可以细分为:新生代、老年代 | 共享 | OutOfMemoryError | GC回收 |
方法区(Non-Heap(非堆)) | 类信息、常量、静态变量、即时编译器编译后的代码等数据 | 共享 | OutOfMemoryError | |
运行时常量池(方法区的一部分) | 存放编译期生成的各种字面量和符号引用 | 共享 | OutOfMemoryError | |
直接内存 | 共享 | OutOfMemoryError |