JVM及JVM内存模型

JVM

什么是JVM ?

JVM(Java Virtual Machine) 是一个抽象的计算模型和运行时环境。它将 Java 字节码(.class 文件)解释或编译为机器代码,并提供内存管理、垃圾回收和线程管理等功能。是Java语言“一次编译,到处运行”(Write Once, Run Anywhere,WORA)理念的核心实现。
JVM由Java规范定义,但具体实现由不同的供应商提供(如Oracle的 HotSpot JVM、OpenJDK、IBM J9等)

JVM的功能有哪些?

加载和执行字节码

JVM 将 Java 编译器后的字节码文件加载到内存中,并逐行解释或编译执行。

内存管理

JVM 管理应用程序的内存,包括堆(Heap)、栈(Stack)、方法区(Method Area)等,负责对象的分配与回收。

垃圾回收(Garbage Collection, GC):

自动回收无用对象的内存,减少内存泄漏的风险。

提供运行时环境

JVM 提供线程管理、异常处理、安全性检查等功能。

跨平台性

JVM 的实现,使得Java 能够一次编写,到处运行

JVM内存模型

组成

  1. 堆(heap)
  2. 栈(stack)也叫虚拟机栈(JVM Stack)
  3. 本地方法栈(ative Method Stack)
  4. 方法区(Method Area)
  5. 程序计数器(PC Register)

线程独占:栈,本地方法栈,程序计数器
线程共享:堆,方法区

比例

image

功能信息

  1. 堆:jvm最大的内存区域,也是线程共享的区域,用于存储所有对象的实例和数据,当堆的内存不足时候会抛出OOM异常。也是GC的重点区域。分为新生代和老年代。新生代进一步划分为Eden区和两个Survivor区。
    image

image

image

image

  1. 栈:也叫虚拟机栈,存储调用方法的局部变量、操作数栈、动态链接和方法返回信息。栈存储变量的实际是一个地址引用,在方法调用结束后存储的局部变量就会被GC掉,但是堆里面的数据不全会被GC。【可能发生OOM或者栈溢出,通过-Xss 来调整内存大小】
    image
    image

  2. 方法区:存储jvm加载的类信息、常量、静态变量等。JDK 8之前叫永久代,之后,方法区被元空间(Metaspace)取代,存储在本地内存中

  3. 本地方法栈:专门为调用本地方法(如C/C++编写的代码)服务

  4. 程序计数器:用于记录当前线程执行的字节码指令地址【唯一不可能发生oom的区域】

posted @ 2025-09-11 10:51  半吊子喵  阅读(25)  评论(0)    收藏  举报
s