‌Java运行时数据区‌

张开发
2026/4/19 22:04:13 15 分钟阅读

分享文章

‌Java运行时数据区‌
‌Java运行时数据区‌是JVM在执行Java程序时管理内存的核心区域它将内存划分为多个逻辑部分以支持程序的运行、方法调用、对象存储和垃圾回收等机制。根据线程的访问权限这些区域可分为‌线程私有‌和‌线程共享‌两大类。一、线程私有区域每个线程独立拥有程序计数器Program Counter Register作用记录当前线程所执行的字节码指令地址是线程执行流程的“导航指针”。特点内存极小‌不会发生内存溢出OOM‌线程私有。多线程切换时JVM通过它恢复线程的执行位置。‌Java虚拟机栈JVM Stack作用管理方法调用过程每个方法调用对应一个‌栈帧Stack Frame‌。栈帧包含‌局部变量表‌存储方法参数、局部变量如int、对象引用。‌操作数栈‌执行字节码指令时的临时数据工作区。‌动态链接‌支持方法调用时的运行时绑定如多态。‌方法返回地址‌方法执行完毕后返回调用者的位置。异常深度过大时抛出StackOverflowError扩展失败时抛出OutOfMemoryError。‌本地方法栈Native Method Stack作用支持JVM调用本地Native方法如C/C代码。在HotSpot虚拟机中常与Java虚拟机栈合并实现。二、线程共享区域所有线程共享‌堆Heap‌作用‌存放所有对象实例和数组‌是JVM内存最大的区域。特点线程共享由垃圾回收器GC统一管理。分代结构基于GC‌新生代Young Generation‌Eden区 两个Survivor区存放新创建对象。‌老年代Old Generation‌存放长期存活的对象。‌元空间Metaspace‌JDK 8后取代永久代使用本地内存存储类元信息。‌方法区Method Area‌作用存储已被加载的类信息、常量、静态变量、即时编译后的代码等。实现在HotSpot中称为“元空间Metaspace”位于本地内存。异常内存不足时抛出OutOfMemoryError: Metaspace。‌运行时常量池Runtime Constant Pool‌作用是方法区的一部分存放编译期生成的字面量和符号引用。示例字符串常量Hello、类和方法的符号引用。‌直接内存Direct Memory‌作用通过ByteBuffer.allocateDirect()分配绕过JVM堆直接使用物理内存。优势提升I/O性能风险不受GC管理需手动控制易引发内存溢出。

更多文章