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

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

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

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

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

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

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

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

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

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

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

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

运行过程:

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

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

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

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

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

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

相关推荐
Haven-17 小时前
Java-面试八股文-JVM篇
java·jvm·面试
我真的是大笨蛋18 小时前
JVM调优总结
java·jvm·数据库·redis·缓存·性能优化·系统架构
豆沙沙包?1 天前
JVM-默背版
jvm
Dovis(誓平步青云)1 天前
《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
开发语言·jvm·c++
星梦清河1 天前
宋红康 JVM 笔记 Day14|垃圾回收概述
jvm·笔记
小鸡脚来咯1 天前
一个Java的main方法在JVM中的执行流程
java·开发语言·jvm
江团1io01 天前
深入解析三色标记算法
java·开发语言·jvm
一枝花算不算浪漫1 天前
线上频繁FullGC?慌得一比!竟是Log4j2的这个“特性”坑了我
jvm·后端
王伯安呢1 天前
Java开发环境配置入门指南
java·开发语言·jvm·eclipse·环境搭建·新手