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内存模型
组成
- 堆(heap)
- 栈(stack)也叫虚拟机栈(JVM Stack)
- 本地方法栈(ative Method Stack)
- 方法区(Method Area)
- 程序计数器(PC Register)
线程独占:栈,本地方法栈,程序计数器
线程共享:堆,方法区
比例

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




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


-
方法区:存储jvm加载的类信息、常量、静态变量等。JDK 8之前叫永久代,之后,方法区被元空间(Metaspace)取代,存储在本地内存中
-
本地方法栈:专门为调用本地方法(如C/C++编写的代码)服务
-
程序计数器:用于记录当前线程执行的字节码指令地址【唯一不可能发生oom的区域】
本文来自博客园,作者:半吊子喵,转载请注明原文链接:https://www.cnblogs.com/johnxh/articles/19071408

浙公网安备 33010602011771号