JAVA 内存布局如下图所示:
下面章节对这些区域进行逐一说明。
1. 栈区
JVM 在运行时的数据区大致如下图所示:
准确来说,栈区包括虚拟机栈、本地方法栈;PC 寄存器是很小的一块内存空间,指向当前线程所执行的字节码的行号,如果线程执行的是 Java 方法,则指向虚拟机字节码指令的地址;如果执行的是 native 方法,这个计数器通常为空。 VM Stack 是线程私有,生命周期与线程相同。如章节 1.1 中的图片所示,VM Stack 中有若干的栈帧 (Stack Frame),每一个 Stack Frame 都对应一个方法。通常大家说的虚拟机中的栈都会特指 VM Stack. 栈区包含若干栈帧,每个栈帧中包括以下信息: