Java 虚拟机 Jvm 内存模型

1. 内存模型

2. 主要存放对象实例

3. 程序计数器

程序计数器记录当前线程执行程序的位置,改变计数器的值来确定执行的下一条指令,比如循环、分支、方法跳转、异常处理,线程恢复都是依赖程序计数器来完成。

4. 方法区

主要存储一些:加载类的信息 、常量、静态变量、即时编译器编译后的代码等元数据信息。

重要区域为常量池: 常量池又分为静态常量池跟运行时常量池。

静态常量池:我们也叫class常量池,存放一些字符串、数字还有一些类以及方法。

运行时常量池:是虚拟机 (JVM) 在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中。载入到内存中,也就是说将class常量池中的内容存放到运行时常量池中。

class常量池是固定的,但运行时常量池在运行时动态添入。

比如String的intern

5. 本地方法栈

本地方法栈、为虚拟机调用本地方法服务(native)。

6. 虚拟机栈

java中每创建一个方法都会有栈帧,栈帧会存在虚拟机栈中。用压栈出栈的方式进行调用方法。

栈帧又分为几点:局部变量表、操作数栈、动态连接、方法返回地址等。

7. 堆

主要存放对象实例。