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

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

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

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

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

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

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

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

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

相关推荐
lifallen16 小时前
Flink Agent:RunnerContext 注入与装配演进分析
java·大数据·人工智能·语言模型·flink
爱丽_16 小时前
Tomcat 从 Socket 到 Servlet:机制主线、参数调优与线上排障(实战)
java·servlet·tomcat
小江的记录本16 小时前
【JEECG Boot】 JEECG Boot——数据字典管理 系统性知识体系全解析
java·前端·spring boot·后端·spring·spring cloud·mybatis
卖男孩的小火柴.16 小时前
java内置方法总结及基础算法
java·算法
赫瑞16 小时前
Java中的日期类
java·开发语言
张元清16 小时前
不用 Server Components 也能做 React 流式 SSR —— 实战指南
前端·javascript·面试
程序员木圭16 小时前
07-数组入门必看!Java数组的内存分析02
java·后端
前端技术16 小时前
ArkTS第三章:声明式UI开发实战
java·前端·人工智能·python·华为·鸿蒙
带刺的坐椅16 小时前
RFC 9535:JSONPath 的标准化之路
java·json·jsonpath·snack4·rfc9535
神の愛16 小时前
java日志功能
java·开发语言·前端