JVM 01

今天是2025/03/20 16:36 day 09

总路线请移步主页Java大纲相关文章

今天进行JVM前二个模块的归纳

首先是JVM的相关内容概括的思维导图

以下是针对思维导图中 内存管理垃圾回收(GC) 模块的详细说明:


1. 内存管理(运行时数据区)

1.1 堆(Heap)
  • 作用:存储对象实例和数组(所有线程共享)。

  • 分区

    • 年轻代(Young Generation):新对象优先分配在此区域。

      • Eden区:对象初次分配的位置。

      • Survivor区(S0/S1):存放经过 Minor GC 后存活的对象,通过复制算法在两个 Survivor 区之间交替存活。

    • 老年代(Old Generation):存放长期存活的对象(例如经历多次 Minor GC 后仍存活的对象)。

  • 触发条件

    • 年轻代满时触发 Minor GC

    • 老年代满时触发 Major GC/Old GC

1.2 方法区(Method Area)
  • 作用:存储类元数据(类名、方法、字段等)、常量池(字面量、符号引用)、静态变量(JDK 8 后静态变量移至堆中)。

  • 实现

    • JDK 8 前:永久代(PermGen),受 -XX:PermSize-XX:MaxPermSize 控制。

    • JDK 8 后:元空间(Metaspace),使用本地内存,受 -XX:MetaspaceSize-XX:MaxMetaspaceSize 控制。

1.3 虚拟机栈(VM Stack)
  • 作用:存储线程私有的方法调用栈帧(每个方法对应一个栈帧)。

  • 栈帧内容

    • 局部变量表:存放方法参数和局部变量。

    • 操作数栈:用于执行字节码指令的临时数据存储。

    • 动态链接:指向方法所属类的运行时常量池引用。

    • 方法返回地址:记录方法执行完成后的返回位置。

  • 异常:栈深度超过 -Xss 设置值时,抛出 StackOverflowError

1.4 本地方法栈(Native Stack)
  • 作用:为 JVM 调用本地(Native)方法(如 C/C++ 代码)提供栈空间。

1.5 程序计数器(PC Register)
  • 作用:记录当前线程执行字节码指令的位置(线程私有)。

  • 特点:唯一不会发生 OOM 的区域。


2. 垃圾回收(GC)

2.1 分代收集策略
  • Minor GC

    • 目标:清理年轻代(Eden + Survivor)。

    • 触发条件:Eden 区满。

    • 存活对象处理:存活对象从 Eden 和 Survivor 复制到另一个 Survivor 区,年龄+1;年龄达到阈值(默认15)则晋升到老年代。

  • Major GC/Old GC

    • 目标:清理老年代(不同收集器行为不同,如 CMS 的并发回收)。

  • Full GC

    • 目标:清理整个堆和方法区。

    • 触发条件:老年代不足、方法区不足、显式调用 System.gc() 等。

2.2 GC 算法
  • 标记-清除(Mark-Sweep)

    • 步骤:标记存活对象 → 清除未标记对象。

    • 缺点:内存碎片化。

  • 复制算法(Copying)

    • 步骤:将存活对象复制到另一块内存区域,清空原区域。

    • 优点:无碎片化;缺点:内存利用率低(适用于年轻代)。

  • 标记-整理(Mark-Compact)

    • 步骤:标记存活对象 → 向一端移动存活对象 → 清理边界外内存。

    • 优点:无碎片化(适用于老年代)。

2.3 GC 收集器
  • Serial

    • 单线程,适用于客户端模式(如 -client 参数)。

  • Parallel(吞吐量优先)

    • 多线程并行回收,关注吞吐量(如 -XX:+UseParallelGC)。

  • CMS(低延迟)

    • 并发标记清除,减少 STW 时间(已逐步被 G1 取代)。

    • 缺点:内存碎片化、CPU 敏感。

  • G1(平衡型)

    • 将堆划分为多个 Region,预测停顿时间进行回收(JDK 9+ 默认)。

    • 适用场景:大堆、低延迟需求。

  • ZGC/Shenandoah(极致低延迟)

    • 支持 TB 级堆,STW 时间控制在 10ms 以内(JDK 11+ 实验性功能)。


调优参数

  • GC 调优核心参数

    • -Xmx/-Xms:堆最大/初始大小。

    • -XX:NewRatio:老年代与年轻代的大小比例。

    • -XX:SurvivorRatio:Eden 与单个 Survivor 区的比例。

  • GC 日志分析

    • 使用 -XX:+PrintGCDetails 输出详细 GC 日志。

    • 工具:GCEasy、GCViewer 等可视化分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值