运行时数据区域
ps:JDK8中方法区被移除,取而代之的是元数据区域。
1.程序计数器
当前线程所执行的字节码指示器。(线程私有)
- JAVA方法:记录正在执行的虚拟机字节码指令地址。
- 本地方法:计数器为空。(本地方法是c/c++实现的,不会产生相应的字节码,所以计数器为空)
异常:唯一一个不存在异常的区域。
2.虚拟机栈
JAVA方法执行的线程内存模型。(线程私有)
每一个方法都有一个栈帧。
栈帧:
- 局部变量表
- 操作数栈
- 动态连接
- 方法出口
异常:StackOverFlowError OutOfMemoryError
3.本地方法栈
使用本地方法服务(主要c/c++实现) 线程私有
异常:StackOverFlowError OutOfMemoryError
4.堆
存放对象实例(线程共享)
异常: OutOfMemoryError
5.方法区
存储被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码缓存数据。
异常: OutOfMemoryError