初始JVM内存区域划分
-
程序计数器(PC Register): 只是一个很小的空间,保存下一条执行的指令的地址。
-
虚拟机栈(JVM Stack): 重点是存储局部变量表,我们创建的数组存储地址的引用就在这里保存。
-
本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似,只不过保存的内容是native方法的局部变量。有些版本的JVM实现中(HotSpot),本地方法栈和虚拟机栈是一起的。
-
堆(Heap): JVM所管理的最大内存区域。使用new创建的对象都是在对上保存。
-
方法区(Method Area):用于存储已被虚拟机加载的类信息,常量,静态变量。即时编译器 编译后的代码等书籍,方法编译出的字节码就是保存在这个区域。
-
运行时常量池(Runtime Constant Pool): 是方法区的一部分,存放字面量(字符串常量)与符号引用。(注意 :从JDK1.7开始,运行常量池在堆上)。
Native方法:JVM是一个基于c++实现的程序。在java程序执行过程中,本质上也需要调用c++提供的一些函数进行和操作系统底层进行一些交互,因此在java开发中也会调用到一些c++实现的函数。
这里的native方法就是指这些c++实现的,再由java 来调用的函数。