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

GC(垃圾回收)的分类

在Java中,垃圾回收(Garbage Collection,简称GC)是自动管理内存的机制。它通过回收不再被使用的对象,释放内存空间,防止内存泄漏。GC有多种方式和策略,根据回收的范围和目标,主要可以分为以下几类:

1. 部分收集(Partial GC)

部分收集并不回收整个Java堆,而是专注于堆的某个区域进行垃圾回收。根据回收的对象范围不同,部分收集又可以细分为以下几种类型:

1.1 新生代收集(Minor GC/Young GC)
  • 目标:仅回收新生代区域的垃圾。新生代是对象刚被创建并且生命周期较短的地方。大多数对象在新生代内存活时间较短,因此该区域的垃圾回收比较频繁。
  • 触发:当新生代的内存空间不足时,会触发Minor GC。它会将新生代中不再被引用的对象回收,通常是一个较为快速的过程。
  • 常见收集器:几乎所有的垃圾回收器(如Serial GC、Parallel GC、G1 GC等)都对新生代进行垃圾回收。
1.2 老年代收集(Major GC/Old GC)
  • 目标:仅回收老年代的垃圾。老年代区域存储的是生命周期较长的对象,这些对象通常已经从新生代晋升到老年代。
  • 触发:当老年代的内存不足时,会触发Major GC。这个过程通常较为耗时,因为需要扫描更大范围的内存并且对象的生命周期较长,回收的对象也较少。
  • 注意:“Major GC”这个术语在不同的资料中可能有不同的定义,有时它指的是仅回收老年代,有时则指回收整个堆(新生代和老年代)。因此在不同上下文中,需要仔细区分。
1.3 混合收集(Mixed GC)
  • 目标:同时回收新生代和部分老年代的垃圾。这种方式结合了新生代收集和老年代收集的策略,但它并不回收整个堆。混合收集通常是为了提升回收效率,避免频繁的Major GC导致系统停顿过长。
  • 常见收集器:目前只有G1(Garbage-First)收集器采用了这种方式。在G1收集器中,回收过程通过多个阶段进行,其中包括了对新生代和部分老年代的回收。
2. 整堆收集(Full GC)

整堆收集是指回收整个Java堆以及方法区的垃圾。Full GC通常是最后的回收手段,涉及的范围较大,因此回收时间较长,可能会对应用性能产生较大影响。

  • 触发:Full GC可能由多个原因触发,例如当老年代空间不足或系统内存紧张时,JVM可能会触发一次Full GC。此外,一些回收器(如CMS和G1)在发生Minor GC时,如果新生代的内存无法容纳更多对象,也可能会触发Full GC。
  • 影响:Full GC会暂停整个应用程序的执行,因此在高性能需求的环境中,频繁的Full GC是不被推荐的。

总结

Java垃圾回收的分类可以根据回收的范围和目标来划分为两大类:部分收集整堆收集。部分收集包括新生代收集、老年代收集和混合收集,而整堆收集则会回收整个堆和方法区。了解不同类型的GC,有助于选择适合的垃圾回收策略,从而优化Java应用的性能。


http://www.kler.cn/a/516676.html

相关文章:

  • 使用 Elasticsearch 导航检索增强生成图表
  • linux-centosubuntu本地源配置
  • 蓝桥杯练习日常|c/c++竞赛常用库函数
  • 使用Python爬虫获取1688店铺所有商品信息的完整指南
  • C#高级:常用的扩展方法大全
  • ubuntu系统docker环境搭建
  • STM32调试手段:重定向printf串口
  • 重载C++运算符
  • salesforce FIELD_FILTER_VALIDATION_EXCEPTION
  • LVGL+FreeRTOS实战项目:智能健康助手(蓝牙模块篇)
  • 假期day1
  • NPM 与 Node.js 版本兼容问题:npm warn cli npm does not support Node.js
  • 文献阅读 250123-Accelerated dryland expansion under climate change
  • 从 TCP/IP 演进看按序流与性能
  • tortoiseSVN图标缺少绿色钩/tortoiseSVN图标不显示解决方案
  • EDI安全:2025年数据保护与隐私威胁应对策略
  • 【面试】Java 记录一次面试过程 三年工作经验
  • git rebase的使用
  • 在K8S中使用Values文件定制不同环境下的应用配置详解
  • ArrayFire异构计算