JVM——JVM 的内存区域是如何划分的?

Java 虚拟机运行时数据区分为方法区、堆、虚拟机栈、本地方法栈、程序计数器。

方法区(Method Area):

1\] 存储类信息、常量、静态变量和即时编译器(JIT)编译后的代码。 \[2\] 属于线程共享区域,所有线程共享方法区内存 \[3\] 在 JDK8之前,HotSpot使用永久代(PermGen)来实现方法区,JDK8之后被元空间(Metaspace)取代,元空间使用的是本地内存(Native Memory)。 堆(Heap): \[1\] 用于存放所有线程共享的对象和数组,是垃圾回收的主要区域。 虚拟机栈(JVM Stack): \[1\] 每个线程创建一个栈,用来保存局部变量、操作数栈、动态链接、方法出口信息等 \[2\] 局部变量表中存储的是基本数据类型(如int、float)以及对象引用。 \[3\] 栈是线程私有的,生命周期与线程相同。 本地方法栈(Native Method Stack): \[1\] 为本地方法服务,使用JNI(Java Native Interface)调用的本地代码在此区域分配内存。 \[2\] 和虚拟机栈类似,也是线程私有的。 程序计数器(Program Counter Register): \[1\] 是一个小的内存区域,保存当前线程执行的字节码指令的地址或行号。 \[2\] 每个线程都有一个独立的程序计数器,属于线程私有。 堆内存的进一步划分 \[1\] Eden 区:新对象最初会被分配到 Eden 区,且 Eden 区较大,频繁进行垃圾回收。 \[2\] Survivor 区:两个Survivor 区 S0 和 S1 交替使用,新对象在 Eden 区经过一次垃圾回收后存放到其中一个 Survivor区,进一步存活的对象会移动到另一个 Survivor 区,最终晋升到老年代。 \[3\] 老年代:长生命周期对象经过多次垃圾回收后会被移到老年代,MaiorGC在老年代进行,频率较低但耗时较长。

相关推荐
稚辉君.MCA_P8_Java1 小时前
豆包 Java的23种设计模式
java·linux·jvm·设计模式·kubernetes
CCCC131016312 小时前
嵌入式学习(day 28)线程
jvm·学习
没有bug.的程序员12 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
舒一笑1 天前
Started TttttApplication in 0.257 seconds (没有 Web 依赖导致 JVM 正常退出)
jvm·spring boot·后端
搬砖的小熊猫1 天前
JVM核心原理与实战优化指南
jvm
静若繁花_jingjing1 天前
JVM执行引擎深入理解
jvm
CHEN5_021 天前
【Java虚拟机】垃圾回收机制
java·开发语言·jvm
静若繁花_jingjing3 天前
JVM对象创建和内存分配机制
jvm
##学无止境##3 天前
深入浅出JVM:Java虚拟机的探秘之旅
java·开发语言·jvm