JVM
December 16, 2023
665
JVM 内存结构主要包括堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(Program Counter)和本地方法栈(Native Method Stack)。下面简要介绍这三个区域的职责和存储内容:
1. 堆(Heap):
- 职责: 堆是 Java 虚拟机用于存储对象实例的区域。它是被所有线程共享的内存区域。
- 存储内容: 主要存储对象实例,包括实例变量、数组等。堆是在 Java 程序运行时动态分配和回收内存的区域,由垃圾回收器负责管理。
2. 栈(Stack):
- 职责: 栈是每个线程私有的,用于存储方法调用和局部变量的区域。每个方法调用都会在栈上创建一个栈帧,用于存储方法的局部变量、操作数栈、方法返回地址等信息。
- 存储内容: 主要存储局部变量、方法参数、操作数栈和方法调用的状态。栈是一个后进先出(LIFO)的数据结构。
3. 方法区(Method Area):
- 职责: 方法区是用于存储类的元信息、静态变量、常量池、方法代码等信息的区域。在 Java 8 及之前的版本,方法区被称为永久代。在 Java 8 及之后的版本,永久代被移除,方法区的内容被移到元空间(Metaspace)。
- 存储内容: 主要存储类的元数据信息、静态变量、常量池、方法代码等。方法区是被所有线程共享的。
需要注意的是,虽然 Java 8 及之后的版本移除了永久代,但方法区的内容仍然存在,只是被称为元空间。元空间的特点是它不再有固定的大小,而是根据需要动态分配。此外,元空间的垃圾回收由 JVM 来处理。
- 本文作者:chen
- 本文链接:http://suft.top/2023/12/16/jvm/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!