线程公有
堆
new对象 存放对象实例的地方
此内存地区的唯一目的就是存放对象的实例,Java中几乎所有的对象实例都是在这个地方分配的
GC垃圾回收发生的区域
方法区
存储已经被虚拟机加载的类型信息 常量 静态变量 即时编译器编译器后的代码缓冲等数据
线程私有
java虚拟机栈
生命周期与线程相同。虚拟机栈描述的Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步穿件一个栈帧用于存储局部变量表 操作数栈 动态链接 方法出口等信息。每一个方法被调用直至执行完成的过程,就对应这一个栈帧在虚拟机栈中从出栈到入栈的过程。
本地方法栈
本地方法栈和Java虚拟机栈发挥的作用非常相似,主要区别是Java虚拟机栈执行的是Java方法服务,而本地方法栈执行Native方法服务(通常用C编写)。
程序计数器
一块较小的内存区域,可以被看做当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里面,字节码解释器工作时就是通过改变这个计数器的值来选去下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转等基础功能都需要依赖这个计数器来完成。
直接内存
并不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError异常出现。