目录
方法区(Method Area):
堆(Heap):
栈(Stack):
本地方法栈(Native Method Stack):
程序计数器(Program Counter Register):
Java Virtual Machine (JVM) 的内存模型是指在运行 Java 程序时,JVM 如何组织和管理内存的结构。JVM 内存分为多个区域,每个区域有不同的用途,用于存储不同类型的数据。下面是 JVM 内存模型的五大区域,以及相应的模型图解:
-
方法区(Method Area):
- 主要存储类的结构信息,如类的字段信息、方法信息、构造方法信息等。
- 运行时常量池,用于存储编译期生成的各种字面量和符号引用。
- 永久代(Permanent Generation):在 JDK 7 及之前版本使用,JDK 8 开始移除了永久代,用元空间(Metaspace)代替。
-
堆(Heap):
- 存储对象实例,包括程序中创建的对象以及 Java 虚拟机自动创建的对象。
- 堆空间可以分为新生代和老年代,还包括持久代(JDK 7 及之前版本)或元空间(JDK 8 及之后版本)。
-
栈(Stack):
- 存储局部变量、操作数栈、方法出口等信息。
- 每个线程都有一个私有的栈,用于存储方法的局部变量和部分结果。
-
本地方法栈(Native Method Stack):
- 与栈类似,用于存储执行本地(native)方法的数据。
-
程序计数器(Program Counter Register):
- 每个线程都有一个程序计数器,用于存储当前线程正在执行的指令的地址。
- 线程切换时,程序计数器也会切换到相应线程的执行地址。
这些区域共同组成了 Java 程序在 JVM 中运行时的内存结构。不同区域的作用和生命周期有所不同,了解这些区域对于理解 Java 内存管理和调优非常重要。请注意,JVM 的一些实现可能对内存模型有所调整,上述描述主要适用于经典的 HotSpot JVM。