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

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

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

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

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

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

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

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

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

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

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

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

运行过程:

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

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

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

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

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

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

相关推荐
小梁不秃捏11 小时前
深入浅出Java虚拟机(JVM)核心原理
java·开发语言·jvm
xiaolingting14 小时前
JVM层面的JAVA类和实例(Klass-OOP)
java·jvm·oop·klass·instanceklass·class对象
神仙别闹21 小时前
基于Python+Sqlite实现的选课系统
jvm·python·sqlite
上分小子2.01 天前
jvm-Java虚拟机
java·开发语言·jvm
5xidixi1 天前
JAVA EE初阶 JVM
java·jvm·java-ee
北城以南没有天1 天前
排查JVM的一些命令
jvm
BUG研究员_1 天前
JVM深入理解
java·jvm·学习
小梁不秃捏2 天前
JVM 类加载器深度解析(含实战案例)
jvm·类加载器
Anarkh_Lee2 天前
图解JVM-2. 类加载子系统
java·jvm·后端
ashane13142 天前
JVM篇:内存分区及作用及各部分可能发生的异常
jvm