当前位置: 首页 > news >正文

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 等可视化分析。

http://www.dtcms.com/a/88883.html

相关文章:

  • C++菜鸟教程 - 从入门到精通 第五节
  • 隔空打印,IPP,IPD,HP Jetdirect协议的区别(Mac添加打印机四种协议的区别)
  • 【Unity】合批处理和GPU实例化的底层优化原理(完)
  • Spring 框架中的 BeanUtils
  • AugFPN
  • STM32标准库开发中断流程
  • 编译原理 pl0 词法解析器 使用状态机与状态矩阵,和查找上一步得到分析
  • Windows下rust的安装
  • python 中match...case 和 C switch case区别
  • 数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server)
  • Linux开机、重启与用户登录注销全解析
  • C++之模板二番战
  • Spring Boot事件机制详解
  • 【STM32】知识点介绍一:硬件知识
  • 画一个分布式系统架构图,标注服务注册、网关、熔断
  • python中的demjson包介绍
  • docker-dockerfile书写
  • 从JVM底层揭开Java方法重载与重写的面纱:原理、区别与高频面试题突破
  • 【性能优化点滴】odygrd/quill 中的冷热属性宏
  • Android Audio基础(13)——audiomixer
  • MySQL里的锁有哪些
  • Python现代化依赖管理全攻略
  • 分布式理论:CAPBASE理论
  • SpringBoot+策略模式+枚举类,使用配置文件改进,优雅消除if-else,完全符合OOP原则
  • nVisual对接企业微信实现机房设备与连接变更的自动化审批
  • 计算机网络--第四章 网络层(2)
  • Spring-Mybatis框架常见面试题
  • 华为云 对象存储服务 OBS | 架构分析与应用场景
  • 夯实 kafka 系列|第二章:kafka 常用参数配置
  • 【leetcode hot 100 33】搜索旋转排序数组