news 2026/2/16 11:12:33

Java垃圾回收机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java垃圾回收机制

可达性分析(Reachability Analysis)

垃圾回收的核心机制是通过可达性判断对象是否存活。从GC Roots(如虚拟机栈、静态变量、本地方法栈等)出发,遍历引用链,未被引用的对象判定为垃圾。

示例代码:

Objectobj=newObject();// obj为GC Roots的强引用obj=null;// 对象不可达,成为垃圾

分代收集理论(Generational Hypothesis)

基于对象生命周期将堆分为新生代(Young Generation)和老年代(Old Generation)。新生代对象存活率低,适合高频回收;老年代对象存活率高,适合低频回收。


标记 - 清除算法(Mark-Sweep)

过程:标记所有可达对象,清除未标记对象。
缺点:内存碎片化,分配大对象时可能触发Full GC。
优点:实现简单,适用于老年代。
适用场景:CMS收集器的老年代回收阶段。


标记 - 整理算法(Mark-Compact)

过程:标记后将存活对象向内存一端移动,清理边界外内存。
缺点:移动对象导致停顿时间较长。
优点:避免碎片化,适合老年代。
适用场景:Serial Old和Parallel Old收集器。


复制算法(Copying)

过程:将内存分为两块,存活对象复制到另一块后清空当前块。
缺点:内存利用率仅50%。
优点:高效无碎片,适合新生代。
适用场景:Serial、ParNew等新生代收集器。

示例参数:

-XX:SurvivorRatio=8# Eden与Survivor区比例

分代收集算法(Generational Collection)

过程:新生代用复制算法,老年代用标记-清除或标记-整理。
缺点:需处理跨代引用。
优点:平衡吞吐量与停顿时间。


新生代收集器

Serial

  • 算法:复制算法
  • 特点:单线程,STW(Stop-The-World)
  • 适用场景:客户端模式或小内存应用

ParNew

  • 算法:复制算法
  • 特点:多线程版Serial,需与CMS配合
  • 适用场景:服务端多核环境

Parallel Scavenge

  • 算法:复制算法
  • 特点:关注吞吐量(Throughput)
  • 参数示例:
    -XX:MaxGCPauseMillis=100# 最大停顿时间目标

老年代收集器

CMS (Concurrent Mark Sweep)

  • 算法:标记-清除
  • 特点:并发标记,低停顿
  • 缺点:碎片化,并发模式失败时退化为Serial Old
  • 适用场景:响应优先的系统

G1 (Garbage-First)

  • 算法:分区(Region)标记-整理
  • 特点:可预测停顿模型,兼顾吞吐与延迟
  • 参数示例:
    -XX:G1HeapRegionSize=4m# 分区大小

GC 触发条件

Minor GC:Eden区满时触发,存活对象移至Survivor或晋升老年代。
Full GC:老年代不足、元数据区不足或显式调用System.gc()触发。


GC 日志分析

开启日志

-XX:+PrintGCDetails -Xloggc:gc.log

关键指标

  • GC pause time:停顿时间
  • Heap usage:回收前后堆占用

JVM 参数调优示例

-Xms4g -Xmx4g# 固定堆大小避免动态调整-XX:+UseG1GC# 启用G1收集器-XX:MaxGCPauseMillis=200# 目标停顿时间

常见问题

频繁 Full GC

  • 原因:老年代空间不足或内存泄漏。
  • 解决:检查对象晋升策略,调整-XX:MaxTenuringThreshold

OOM

  • 原因:堆不足或直接内存溢出。
  • 解决:分析堆转储(-XX:+HeapDumpOnOutOfMemoryError)。

收集器对比

收集器停顿时长吞吐量适用场景
Serial客户端/小内存
Parallel后台计算任务
G1可控中高大堆低延迟需求

监控工具

  • 命令行:jstat -gcutil <pid>
  • 可视化:VisualVM、Grafana + Prometheus

未来趋势

  • ZGC:亚毫秒级停顿,适用于超大堆(JDK15+生产可用)。
  • Shenandoah:并发整理,与G1竞争(JDK12+)。

通过合理选择算法和收集器,结合日志分析与参数调优,可显著提升Java应用性能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/14 19:31:41

月薪从5K到13.2W,白帽子黑客到底有多赚钱?一文带你如何靠挖漏洞赚取海量收益_白帽子如何赚钱

近年来&#xff0c;由于技术发展和国家支持&#xff0c;信息安全行业正处于一个发展迅猛的时期。有越来越多有技术、有想法的白帽子参与到维护互联网安全的行动中去。 大数据时代&#xff0c;信息安全的使命更值得我们深思和探讨。 不掌握一门安全技术&#xff0c;不会 Web 攻…

作者头像 李华
网站建设 2026/2/14 7:07:59

android MQTT封装

单纯的记录一下代码 1. build.gradle implementation org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5 implementation org.eclipse.paho:org.eclipse.paho.android.service:1.1.1 2. activity_mian.xml <?xml version"1.0" encoding"utf-8"…

作者头像 李华
网站建设 2026/2/15 7:41:49

2026研究生必备10个降AI率工具

2026研究生必备10个降AI率工具 AI降重工具&#xff1a;让论文更“自然”的秘密武器 随着人工智能技术的广泛应用&#xff0c;越来越多的研究生在撰写论文时不得不面对一个现实问题——AIGC率过高。这不仅影响论文的原创性评估&#xff0c;还可能对最终成绩产生负面影响。而AI降…

作者头像 李华
网站建设 2026/2/13 6:35:58

Spark机器学习库MLlib:大数据AI应用开发指南

Spark机器学习库MLlib:大数据AI应用开发指南 1. 引入与连接 1.1 引人入胜的开场 想象一下,你身处一家大型电商公司,每天都有海量的用户行为数据涌入,包括用户的浏览记录、购买历史、搜索关键词等。公司想要精准地预测用户的购买倾向,以便推送个性化的商品推荐,从而提高…

作者头像 李华
网站建设 2026/2/14 22:14:43

智能体的上下文记忆优化方案

看一个人能力强弱&#xff0c;其实可以从两个简化的维度来衡量&#xff0c;第一个是认知能力和思维方式&#xff0c;另一个是储备的知识和经验。这两种能力相辅相成&#xff0c;可以形成一个人独特的竞争力。如果看一个智能体的能力水平&#xff0c;也可以通过这两个维度来衡量…

作者头像 李华
网站建设 2026/2/15 17:29:35

Java基于Spring Boot+Vue的美食网站的设计与实现

所需该项目可以在最下面查看联系方式&#xff0c;为防止迷路可以收藏文章&#xff0c;以防后期找不到 项目介绍 随着人们生活水平的提高&#xff0c;对美食的追求已经不仅仅局限于满足口腹之欲&#xff0c;更成为了一种生活态度和文化体验。越来越多的人热衷于探索、尝试和分…

作者头像 李华