页面加载中
博客快捷键
按住 Shift 键查看可用快捷键
ShiftK
开启/关闭快捷键功能
ShiftA
打开/关闭中控台
ShiftD
深色/浅色显示模式
ShiftS
站内搜索
ShiftR
随机访问
ShiftH
返回首页
ShiftL
友链页面
ShiftP
关于本站
ShiftI
原版/本站右键菜单
松开 Shift 键或点击外部区域关闭
互动
最近评论
暂无评论
标签
寻找感兴趣的领域
暂无标签
    0
    文章
    0
    标签
    8
    分类
    10
    评论
    128
    功能
    深色模式
    标签
    JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
    互动
    最近评论
    暂无评论
    标签
    寻找感兴趣的领域
    暂无标签
      0
      文章
      0
      标签
      8
      分类
      10
      评论
      128
      功能
      深色模式
      标签
      JavaScript12TypeScript8React15Next.js6Vue10Node.js7CSS5前端20
      未知歌曲
      未播放
      ♪ 暂无歌词 ♪
      随便逛逛
      博客分类
      文章标签
      复制地址
      深色模式
      AnHeYuAnHeYu
      Search⌘K
      博客
        暂无其他文档

        Full GC

        Full GC是JVM对整个堆内存(包括新生代和老年代)进行的全面垃圾回收,主要在老年代空间不足时触发。其实现分为标记、筛选、垃圾回收和压缩四个阶段,通过可达性分析算法识别存活对象并回收垃圾对象。虽然Full GC能避免内存泄漏、优化空间利用,但会带来较长的停顿时间。建议通过调整JVM参数减少其触发频率,并使用监控工具及时发现性能问题。

        March 22, 20266 分钟 阅读3 次阅读

        有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

        全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001

        1. 什么是Full GC?

        Full GC(Full Garbage Collection)是指对整个JVM堆内存中的对象进行全面的垃圾回收。在Java中,堆内存被划分为新生代(Young Generation)和老年代(Old Generation)。新生代主要存放新创建的对象,而老年代则存放已经存活一段时间的对象。Full GC主要针对老年代进行垃圾回收。

        2. 为什么需要Full GC?

        Full GC是由于老年代内存空间占用过多、垃圾对象较多等情况下触发的。当老年代的内存空间无法满足新对象的分配或者没有足够的连续内存空间时,会触发Full GC以回收不再使用的对象,释放内存空间。

        3. Full GC的实现原理?

        Full GC的实现原理与Young GC(新生代垃圾回收)不同。Young GC只回收新生代的对象,而Full GC则对整个堆内存进行扫描和回收。

        Full GC的实现通常分为以下几个阶段:

        3.1. 标记阶段

        标记阶段是Full GC的第一个阶段,通过遍历整个堆内存,标记出所有存活的对象。标记的方式通常采用“可达性分析算法”,从根对象(如GC Roots)开始,逐个遍历对象,标记出所有可达的对象。

        3.2. 筛选阶段

        筛选阶段是Full GC的第二个阶段,通过筛选出不再被引用的对象,将其标记为垃圾对象。筛选的方法有几种,如引用计数法、引用链法等。

        3.3. 垃圾回收阶段

        在垃圾回收阶段,被标记为垃圾对象的内存将会被回收,释放给堆内存。具体的回收方法可以有清除(直接回收),复制(将存活对象复制到其他内存区域),标记-清除(标记垃圾对象后清除)等。

        3.4. 压缩阶段

        压缩阶段是Full GC的最后一个阶段,其主要目的是收集堆内存中的碎片化空间。通过移动对象的位置,使得堆内存中的连续空闲空间最大化,以供后续的对象分配使用。

        4. Full GC的使用示例

        Full GC的触发并不是由我们代码显式调用,而是由JVM自动触发的。可以通过指定JVM参数来设置Full GC的频率和阈值。例如,可以使用以下参数来设置Full GC的阈值为5次Young GC后进行一次Full GC:

        -XX:MaxGCPauseMillis=500 -XX:GCPauseIntervalMillis=3000
        

        5. Full GC的优点

        • 可以对整个堆内存进行全面的垃圾回收,释放不再使用的对象,避免内存泄漏。
        • 可以优化堆内存的空间利用,减少碎片化空间。
        • 可以保证JVM的性能稳定,避免因为堆内存不足导致频繁的OutOfMemoryError。

        6. Full GC的缺点

        • Full GC通常比Young GC耗时更长,可能会引发较长的停顿时间,影响系统的响应性能。
        • Full GC需要清理整个堆内存,会占用一定的CPU和内存资源。

        7. Full GC的使用注意事项

        • 尽量避免Full GC的频繁触发,可以调整JVM参数来适当增加Young GC的次数,减少Full GC的发生。
        • 需要根据具体的应用场景和性能需求来调整Full GC的阈值和频率,以避免对系统性能造成太大的影响。
        • 建议使用性能监控工具对Full GC进行监控和分析,及时发现和解决Full GC导致的性能问题。

        8. 总结

        Full GC是针对整个堆内存的垃圾回收过程,通过标记、筛选和回收等阶段,可以释放不再使用的对象,优化堆内存的空间利用。尽管Full GC可能会导致较长的停顿时间,但合理设置Full GC的阈值和频率,以及对Full GC进行监控和分析,可以有效避免Full GC对系统性能的影响。

        最后更新于 March 22, 2026
        On this page
        暂无目录