Java学习笔记——JVM之内存区域

JVM内存区域

JVM内存区域算是面试中问到比较多的基础中的基础了吧,特此记录。

1.程序计数器

线程私有,记录指令地址,用于储存当前线程所执行的字节码的行号。

2.Java虚拟机栈

线程私有,就是通常所说的“栈区”,用于描述java方法执行。每调用一次方法就会创建一个“栈帧”并将其压入栈中,方法执行完出栈。
栈帧中存有局部变量表等信息,java方法中的局部变量(包括基本数据类型以及引用数据类型)存放于此。
每个栈帧中分配的内存在类加载完成后就确定了。

3.本地方法栈

可以简单理解为本地方法(Nativite Method)使用的栈,类比上条java虚拟机栈。

4.Java堆

用于存放所有的对象数组所有线程共享,GC的主要区域,JVM的最大区域。可以是物理上不连续的内存。
新建对象时,对象需要多少空间在类加载完成后就已经确定了。

5.方法区

如果上述的Java堆用于存放对象的信息的话,方法区可以简单理解为存放类以及常量的信息,有时候被称为“永久代”。
方法去中还包含“运行时常量池”,如String的常量池便在其中。

参考书:《深入理解Java虚拟机》

你可能感兴趣的:(Java)