JVM的内存结构

JVM内存结构概述

JVM(Java虚拟机)内存结构是Java程序运行时的核心组成部分,分为多个区域,每个区域负责不同的功能。主要分为线程共享区域线程私有区域


线程共享区域

  1. 堆(Heap)

    • 存储对象实例和数组,是垃圾回收的主要区域。
    • 分为新生代(Young Generation)和老年代(Old Generation),新生代进一步划分为Eden、Survivor0、Survivor1区。
    • 通过-Xms-Xmx参数设置初始和最大堆大小。
  2. 方法区(Method Area)

    • 存储类信息、常量、静态变量、即时编译器编译后的代码等。
    • JDK 8之前称为"永久代"(PermGen),JDK 8及之后改为"元空间"(Metaspace),使用本地内存。
    • 通过-XX:MetaspaceSize-XX:MaxMetaspaceSize调整大小。
  3. 运行时常量池(Runtime Constant Pool)

    • 方法区的一部分,存储编译期生成的字面量和符号引用。

线程私有区域

  1. 程序计数器(Program Counter Register)

    • 记录当前线程执行的字节码指令地址,线程切换后能恢复到正确位置。
    • 唯一不会抛出OutOfMemoryError的区域。
  2. 虚拟机栈(JVM Stack)

    • 存储栈帧(Frame),每个方法调用对应一个栈帧,包含局部变量表、操作数栈、动态链接和方法返回地址。
    • 栈深度超过限制会抛出StackOverflowError;动态扩展失败会抛出OutOfMemoryError
    • 通过-Xss参数设置栈大小。
  3. 本地方法栈(Native Method Stack)

    • 为Native方法服务,与虚拟机栈类似,可能抛出StackOverflowErrorOutOfMemoryError

直接内存(Direct Memory)

  • 非JVM规范定义的内存,但频繁使用(如NIO的ByteBuffer)。
  • 通过-XX:MaxDirectMemorySize设置大小,溢出时抛出OutOfMemoryError

内存参数示例

java 复制代码
// 常见JVM内存参数
-Xms256m  // 初始堆大小
-Xmx1024m // 最大堆大小
-XX:MetaspaceSize=128m  
-XX:MaxMetaspaceSize=256m  
-Xss256k  // 线程栈大小
相关推荐
爱学习的阿磊19 分钟前
Python入门:从零到一的第一个程序
jvm·数据库·python
naruto_lnq23 分钟前
编写一个Python脚本自动下载壁纸
jvm·数据库·python
仟濹24 分钟前
【Java加强】1 异常 | 打卡day1
java·开发语言·python
AllData公司负责人36 分钟前
【亲测好用】实时开发平台能力演示
java·c语言·数据库
pcm12356736 分钟前
设计C/S架构的IM通信软件(3)
java·c语言·架构
咖啡啡不加糖1 小时前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana
€8111 小时前
Java入门级教程26——序列化和反序列化,Redis存储Java对象、查询数据库与实现多消费者消息队列
java·拦截器·序列化和反序列化·数据库查询·redis存储java对象·多消费者消息队列
多多*1 小时前
Mysql数据库相关 事务 MVCC与锁的爱恨情仇 锁的层次架构 InnoDB锁分析
java·数据库·windows·sql·oracle·面试·哈希算法
cyforkk1 小时前
15、Java 基础硬核复习:File类与IO流的核心逻辑与面试考点
java·开发语言·面试
李少兄1 小时前
解决 org.springframework.context.annotation.ConflictingBeanDefinitionException 报错
java·spring boot·mybatis