JVM 内存模型,分为哪些区域?各区域的作用是什么?

JVM 内存模型分为以下几个区域:

1.程序计数器(ProgramCounterRegister):每个线程都有自己的程序计数器,用于指示当前线程执行的字节码指令的行号,以便线程执行时能够回到正确的位置。

  1. 虚拟机栈(JVMStack):也称为Java方法栈,用于存储方法执行时的局部变量表、操作数栈、动态链接、方 法出口等信息。每个线程在执行一个方法时,都会为该方法分配一个栈帧,并将该栈帧压入虚拟机栈,当方法 执行完毕后,虚拟机会将其出栈。

  2. 本地方法栈(NativeMethodStack):与虚拟机栈类似,用于存储本地方法的执行信息。

  3. 堆(Heap):用于存储对象实例,是JVM中最大的一块内存区域。堆是被所有线程共享的,当创建一个新对 象时,对象实例存储在堆中,堆中存储的对象实例都有一个标记用于标记对象是否存活。垃圾回收器会周期性 地回收那些没有被标记为存活的对象。

  4. 方法区(MethodArea):用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代 码等数据。方法区也是被所有线程共享的。

  5. 运行时常量池(RuntimeConstantPool):是方法区的一部分,用于存储编译期间生成的各种字面量和符号 引用,这些内容在类加载后进入常量池中。

其中,程序计数器、虚拟机栈、本地方法栈是线程私有的,堆、方法区、运行时常量池是线程共享的。

相关推荐
追随者永远是胜利者17 小时前
(LeetCode-Hot100)64. 最小路径和
java·算法·leetcode·职场和发展·go
学习是生活的调味剂17 小时前
nacos原理之服务注册浅析
java·开发语言·nacos·注册中心
雨夜之寂17 小时前
大模型 ai coding 比较
后端·面试
没有bug.的程序员18 小时前
Arthas 深度进阶:线上问题非侵入式诊断内核、方法级监控与线程阻塞排查实战指南
java·arthas·线上问题·非侵入式·方法级监控·线程阻塞
香芋Yu18 小时前
【大模型面试突击】04_Embedding与表示学习
学习·面试·embedding
亓才孓18 小时前
[Mybatis]Mybatis框架
java·数据库·mybatis
跟Tom学编程—一对一编程辅导18 小时前
基于 Java 的 SSM 架构电子商城项目毕业设计课题选型指导文档|名企高级开发工程师全程一对一指导(含详细文档+源码+部署)
java·架构·毕业设计·课程设计
编程小风筝18 小时前
编写java代码如何写文档注释?
java·开发语言
与衫19 小时前
如何将SQLFlow工具产生的血缘导入到Datahub平台中
java·开发语言·数据库
m0_4750645019 小时前
SpringAI-1-集成DeepSeek
java