Minor GC、Major GC 和 Full GC 是 Java 垃圾回收(GC)中的三种主要类型

Minor GC、Major GC 和 Full GC 是 Java 垃圾回收(GC)中的三种主要类型,它们在垃圾回收过程中有不同的作用和触发条件。以下是它们之间的详细区别:

1. **Minor GC**:
   - **作用**:Minor GC 主要发生在年轻代(包括 Eden 区和 Survivor 区)。其目的是回收年轻代中的垃圾对象。由于大多数对象都是朝生夕灭的,Minor GC 非常频繁,且回收速度较快。
   - **触发条件**:当 Eden 区满时,会触发 Minor GC。Minor GC 会将存活的对象从 Eden 区复制到 Survivor 区,并增加这些对象的年龄。当对象的年龄达到一定阈值(默认为 15 岁)时,它们会被晋升到老年代。
   - **影响**:Minor GC 通常不会影响应用程序的运行,因为它只涉及年轻代的内存回收,且回收过程较快。

2. **Major GC**:
   - **作用**:Major GC 主要发生在老年代。其目的是清理老年代中的垃圾对象。Major GC 的速度通常比 Minor GC 慢 10 倍以上。
   - **触发条件**:Major GC 通常由 Minor GC 触发。当 Minor GC 发生后,如果老年代的内存仍然不足,就会触发 Major GC。此外,Major GC 也可以通过调用 `System.gc()` 显式触发。
   - **影响**:Major GC 会对应用程序的性能产生较大影响,因为它需要停止应用程序的线程来进行垃圾回收。

3. **Full GC**:
   - **作用**:Full GC 清理整个堆空间,包括年轻代和老年代。其目的是回收整个 JVM 堆中的垃圾对象。
   - **触发条件**:
     1. 调用 `System.gc()` 时,系统建议执行 Full GC,但不是必然执行。
     2. 老年代空间不足。
     3. 方法区空间不足。
     4. 通过 Minor GC 后进入老年代的平均大小大于老年代的可用内存。
     5. 由 Eden 区、From Space 区向 To Space 区复制时,对象大小大于 To Space 可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小。
   - **影响**:Full GC 会对应用程序的性能产生显著影响,因为它需要停止应用程序的所有线程来进行垃圾回收。Full GC 的时间通常比 Minor GC 和 Major GC 都要长。

总结:
- **Minor GC**:频繁且快速,只影响年轻代。
- **Major GC**:较慢,影响老年代,通常由 Minor GC 触发。
- **Full GC**:最慢,影响整个堆空间,通常在老年代和方法区空间不足时触发。
 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值