7-1JVMCG垃圾回收

一、GC的作用与原理

​核心功能​

自动识别并回收堆内存中不再被引用的对象,释放内存空间。

避免手动管理内存的复杂性(如C/C++中的delete/free操作),降低内存泄漏风险。

​判断对象可回收的方法​

​可达性分析算法:从GC Roots(如虚拟机栈、静态变量、本地方法栈等)出发,遍历对象引用链,无法到达的对象标记为可回收。

替代了传统的引用计数法(易循环引用导致内存泄漏)。

二、分代管理与GC类型

JVM将堆内存划分为不同代区,针对不同生命周期对象采用差异化回收策略:

​新生代(Young Generation)​​

​区域划分:Eden区(新对象分配地)、Survivor区(S0/S1,存活对象过渡区)。

​Minor GC/Young GC:当Eden区满时触发,存活对象复制到Survivor区,多次存活后晋升老年代。

​特点:高频、快速,采用复制算法​(减少碎片)。

​老年代(Old Generation)​​

​Major GC/Old GC:CMS收集器特有,单独回收老年代(其他收集器通常直接触发Full GC)。

​Full GC:回收整个堆(含方法区/元空间),触发条件包括:

老年代空间不足。

方法区(永久代)内存不足(JDK8前)。

System.gc()显式调用(可通过参数禁用)。

三、常见垃圾收集器

JVM提供多种收集器,适应不同场景需求:

​新生代收集器​

​Serial:单线程,适合客户端应用(低资源消耗)。

​ParNew:多线程版Serial,配合CMS使用。

​Parallel Scavenge:吞吐量优先,适合后台计算任务。

​老年代收集器​

​CMS(Concurrent Mark Sweep)​:并发标记清除,减少停顿时间,但易碎片化。

​G1(Garbage-First)​:分区回收,兼顾吞吐与低延迟,适合大堆内存。

​全堆收集器​

​ZGC/Shenandoah:超低延迟(毫秒级停顿),适用于实时系统。

四、GC调优策略

​目标选择​

​吞吐量优先:如Parallel Scavenge + Parallel Old,适合批处理任务。

​低延迟优先:如G1/CMS,适合Web服务。

​关键参数调整​

新生代与老年代比例(-XX:NewRatio)。

Survivor区比例(-XX:SurvivorRatio)。

堆大小(-Xms初始堆、-Xmx最大堆)。

​监控工具​

jstat查看GC频率与耗时。

VisualVM分析堆内存分布。

五、GC算法对比

​标记-清除:简单但碎片化严重。

​复制:高效无碎片,但内存利用率低(适合新生代)。

​标记-整理:解决碎片问题,适合老年代(如Serial Old)。

​分代收集:综合不同算法,适应对象生命周期差异。

相关推荐
luj_17687 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
我命由我123457 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
mCell8 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
咖啡八杯8 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0018 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby9 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176810 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
tmlx3I08110 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-10 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~11 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法