JVM内存分配机制,内存模型

JVM内存分配机制是什么,有什么用

首先了解JVM的内存模型,它是java运行时数据区的一种规范,定义了JVM在执行java过程中如何管理内存,五个主要部分有堆、(虚拟机)栈、方法区、程序计数器和本地方法栈,

堆内存是JVM中最大的内存区域,用于存储对象实例和数组,可以动态扩展堆内存,由JVM垃圾回收器负责管理对象的内存分配和释放。

方法区用于存储类的结构信息、静态变量、常量等。包含常量池,用于存储编译期生成的字面量和符号引用。

栈内存用于存储线程执行时的局部变量、操作数栈、方法出口等信息。每个线程都有自己的栈内存,栈内存的大小在创建线程时就确认了。

本地方法栈与栈内存类似,但是用于执行 Native 方法(使用 JNI 调用的本地方法)时的栈内存区域。

程序计数器是每个线程私有的,用于存储当前线程正在执行的字节码指令地址,在多线程环境下,不同线程的程序计数器相互独立,互不影响

除了上述主要的内存区域外,还有一些其他的内存区域,比如直接内存(Direct Memory)等。在 Java 7 之后,引入了元空间(Metaspace),用于取代了永久代(PermGe.n)来存储类的元数据信息,提高了GC性能,避免频繁OOM(内存溢出)

  • 元空间和永久代是实现方法区的一种方式

为什么使用元空间替代了永久代

作用则关系到程序的运行效率和稳定性。可以确保每个对象,数组运行时获得合适的存储空间,同时涉及垃圾回收机制,以回收不再使用的对象所占用的内存,避免内存泄漏和溢出。

运行过程:

JVM启动时,会根据配置参数确定各个内存区域的初始大小。

当Java程序运行时,JVM会根据需要动态分配堆内存给对象实例。

每个线程在执行方法时,会在虚拟机栈上创建一个栈帧,用于存储方法的局部变量和操作数栈。

方法区用于存储类的结构信息,如字段、方法、常量池等。

程序计数器记录当前线程执行的字节码指令地址,用于线程切换和指令跳转。

当对象不再被引用时,垃圾回收器会自动回收堆内存中的对象。

相关推荐
芒克芒克3 小时前
深入浅出JVM的运行时数据区
java·开发语言·jvm·面试
月明长歌4 小时前
JavaThread类详解核心属性、常用方法与实践
java·开发语言·jvm
kaico20184 小时前
JVM的垃圾回收
开发语言·jvm
zfj3214 小时前
java垃圾收集 minorgc majargc fullgc
java·开发语言·jvm·gc·垃圾收集器
烟沙九洲4 小时前
JVM 堆内存分代
java·jvm
独自破碎E6 小时前
JVM由哪些部分组成?
jvm
曹轲恒21 小时前
JVM之垃圾回收算法(GC)
jvm·算法
xiaolyuh1231 天前
ThreadLocalMap 中弱引用被 GC 后的行为机制解析
java·jvm·redis
这周也會开心1 天前
JVM-垃圾回收算法
jvm·算法
代码or搬砖1 天前
JVM垃圾回收算法
jvm·算法