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

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

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

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

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

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

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

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

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

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

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

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

运行过程:

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

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

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

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

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

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

相关推荐
oioihoii6 小时前
C++23 中 static_assert 和 if constexpr 的窄化布尔转换
java·jvm·c++23
jzshmyt11 小时前
大内存生产环境tomcat-jvm配置实践
java·jvm·tomcat
左灯右行的爱情15 小时前
JVM-类加载机制
jvm
左灯右行的爱情1 天前
深入理解 G1 GC:已记忆集合(RSet)与收集集合(CSet)详解
java·jvm·后端·juc
智商低情商凑2 天前
CAS(Compare And Swap)
java·jvm·面试
Mr__Miss2 天前
JVM学习笔记
jvm·笔记·学习
碎梦归途2 天前
23种设计模式-结构型模式之适配器模式(Java版本)
java·开发语言·jvm·单例模式·设计模式·适配器模式
江沉晚呤时2 天前
深入了解递归、堆与栈:C#中的内存管理与函数调用
java·jvm·算法
银河麒麟操作系统2 天前
【银河麒麟高级服务器操作系统】磁盘只读问题分析
java·linux·运维·服务器·jvm
爱的叹息2 天前
Java虚拟机(JVM)家族发展史及版本对比
java·开发语言·jvm