java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JVM的垃圾处理机制

JVM的垃圾处理机制详解

作者:三傻317

JVM通过可达性分析确定垃圾对象,采用分代收集策略:新生代用复制算法(Eden+Survivor),老年代用标记-整理,现代收集器如G1兼顾吞吐与延迟,ZGC/Shenandoah实现超低延迟,适用于不同场景

JVM的垃圾处理机制

一、垃圾回收的流程

JVM 的垃圾回收(Garbage Collection, GC)大体分为两步:

  1. 可达性分析(找到谁是垃圾)
  2. 垃圾回收算法(使用合适的算法处理垃圾)

二、可达性分析

可达性分析用来判断一个对象是否还存活。

JVM 会从一些 GC Roots(如虚拟机栈中的局部变量、方法区的静态变量、本地方法栈中的引用等)开始向外搜索,如果能通过引用链找到某个对象,那么该对象就是“可达”的,不会被回收;反之,就是“垃圾”。

需要注意:对象被标记为垃圾后,并不会立刻清除,而是等到下一次触发 GC 时才会被统一清理。

三、垃圾回收算法

常见的 GC 基础算法有三种:

标记-清除(Mark-Sweep)

复制(Copying)

标记-整理(Mark-Compact)

四、分代收集

不同算法各有优劣,JVM 采用 分代收集(Generational GC) 的思想:

新生代

老年代

大对象

五、现代 GC 收集器

在实际 JVM 中,基础算法往往会被组合和优化,形成不同的收集器:

1. Serial GC

2. Parallel GC(吞吐量优先)

3. CMS(Concurrent Mark-Sweep)

4. G1(Garbage-First)

5. 其他新一代收集器

总结

常见收集器

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文