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

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

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

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

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

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

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

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

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

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

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

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

运行过程:

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

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

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

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

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

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

相关推荐
Irene19913 小时前
Flink 学习日志 01:前端转大数据的实战避坑指南
java·jvm·flink
小天源17 小时前
从 Nginx 日志到访问分析:轻量化网站监测服务的架构实践
jvm·nginx·网络安全·架构·网络监控
十年Java程序媛20 小时前
JVM 内存区域与对象内存布局|new 对象底层流程,对象头 MarkWord 详解
java·jvm·spring boot
用户0942485680320 小时前
第2章:Windows、WSL2 与 Docker 环境搭建Redis
java·jvm
梅梅绵绵冰1 天前
JVM虚拟机
java·开发语言·jvm
十年Java程序媛1 天前
JVM 基础与 GC 垃圾回收详解|可达性分析、分代模型、垃圾收集器、STW
java·开发语言·jvm·spring boot·后端·面试
Lhappy嘻嘻2 天前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
CS创新实验室3 天前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python
wuminyu3 天前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
DongQiShanRen3 天前
六根硬件映射(下):物理闭环五步法,抽一条已实装的看
大数据·jvm·人工智能·算法·rust·哈希算法·集成学习