java虚拟机在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域。
- 程序计数器
它可以看作是当前线程锁执行的字节码的行号指示器,字节码解释器工作时就是通过这个计数器的值来选取吓一跳需要执行的字节码指令
每个线程独有 私有
-Java虚拟机栈
就是我们平常说的栈内存,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态连接、方法出口等信息。
每个线程独有 私有
- 本地方法栈
本地方法栈与虚拟机栈所发挥的作用是非常相似,其区别只是虚拟机栈执行的Java方法服务,而本地方法栈则是为虚拟机使用的本地方法服务。
每个线程独有 私有
- Java堆
Java堆是虚拟机所管理的内存中最大的一块,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java世界里“几乎”所有的对象实例都在这里分配内存。
所有线程共享
- 方法区
用于存储已被虚拟机加载的类型信息、常量、静态常量、即时编译器编译后的代码存储等数据。
所有线程共享
- 运行时常量池
运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述到信息外,还有一项信息是常量池表,用于存放编译器生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区。



