
一、PC(Program Counter):每个线程都有自己的PC,如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。
二、VM Stack: 每个线程都有自己的VM Stack;
栈帧(Stack Frame)用于存储 局部变量表、操作数栈、动态链接、方法出口。
每个方法的被调用知道执行完毕的过程,相当于栈帧 在VM Stack的入栈和出栈的过程。
三、Native Method Stack
和 VM Stack 差不多,区别去他是服务于虚拟机使用到本地方法(Native Method)。
四、Java Heap
用于存放java的对象实例(-Xmx, -Xms来控制Heap的大小)
五、Method Area
用于存储已经被虚拟机加载的类型信息、常量、静态变量、即时编译后的代码缓存等数据
六、运行时常量池
运行时常量池是方法区的一部分。 用于存放编译期生成的各种字面量和符号引用和运行期间新引入的常量(如 String:intern())
七、直接内存
NIO引入了Channel和Buffer的I/O方式,它可以使用Native函数直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。
本文详细介绍了Java虚拟机(JVM)的内存结构,包括PC寄存器、虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池和直接内存。每个部分的功能和作用都进行了阐述,例如PC寄存器记录执行的字节码地址,虚拟机栈中每个栈帧存储局部变量、操作数栈等信息,直接内存则是通过NIO进行堆外内存的分配和操作。这些内存区域对于理解Java程序的运行至关重要。

1026

被折叠的 条评论
为什么被折叠?



