【jvm】Full GC

目录

          • [1. 说明](#1. 说明)
          • [2. 触发条件](#2. 触发条件)
          • [3. 优化](#3. 优化)
          • [4. 注意事项](#4. 注意事项)
1. 说明
  • 1.Full GC(Full Garbage Collection)是Java垃圾回收过程中最重要且最昂贵的一种操作。
  • 2.Full GC涉及对整个堆内存(包括年轻代老年代)的垃圾回收。
  • 3.当Full GC发生时,JVM会暂停所有的应用程序线程,直到垃圾回收完成,这种暂停被称为"Stop-the-World"(STW)事件。
  • 4.由于Full GC需要对整个堆进行扫描和清理,因此它会比只回收年轻代的垃圾回收(Minor GC)耗费更多的时间和资源。
2. 触发条件
  • 1.老年代空间不足:当老年代空间不足以容纳新创建的对象或被提升的对象时,会触发Full GC。
  • 2.永久代/元空间不足:永久代/元空间主要用于存储类的元数据和静态信息,因此类加载过多或类定义过多时,可能会导致Full GC。
  • 3.手动执行GC命令:使用System.gc()方法或调用Runtime.getRuntime().gc()方法可以手动触发Full GC,但这是一个建议,JVM可以选择执行。
  • 4.年代晋升失败:如对象从年轻代晋升到老年代时,老年代没有足够的空间容纳这些对象,也会触发Full GC。
  • 5.CMS的Concurrent-Mode-Failure:在使用CMS(Concurrent Mark-Sweep)垃圾收集器时,如果在Minor GC之后没有足够的空间在老年代容纳晋升对象,会触发Full GC。
  • 6.G1垃圾收集器的特殊情况:在使用G1垃圾收集器时,如果在年轻代GC后无法找到足够的连续空闲内存空间来放置所有存活对象,也会触发Full GC。
3. 优化
  • 1.调整堆的大小:通过增加老年代的大小或减少年轻代的大小,可以减少老年代空间不足而触发的Full GC。同时,设置合理的初始堆大小和最大堆大小,使得JVM启动时堆内存就达到适合的大小,减少堆扩展时可能的Full GC。
  • 2.使用合适的垃圾收集器:根据应用程序的特点选择适合的垃圾收集器可以更好地平衡内存占用和性能。例如,对于需要低延迟的应用程序,可以选择使用CMS或G1垃圾收集器。
  • 3.减少对象产生:通过对象的复用、使用对象池等方式减少对象的产生,可以降低GC的负担,从而减少Full GC的发生。
  • 4.分析Full GC日志:仔细分析Full GC日志可以帮助找出导致Full GC的根本原因。通过分析日志中的堆内存使用情况、垃圾收集时间和回收的内存量等信息,可以找到潜在的问题并进行相应的优化。
4. 注意事项
  • 1.避免频繁调用System.gc():在代码中尽量避免频繁调用System.gc()方法,因为这可能会引起不必要的Full GC。
  • 2.监控内存使用情况:使用JVM提供的监控工具(如jstat、visualvm等)监控内存使用情况,及时发现并处理内存泄漏等问题。
  • 3.选择合适的JVM参数:根据应用程序的需求选择合适的JVM参数,如堆大小、垃圾收集器类型等,以优化性能。
相关推荐
蚰蜒螟1 小时前
深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
开发语言·jvm·python
头发那是一根不剩了4 小时前
怎么用idea分析hprof文件定位JVM内存问题
java·jvm
20242817李臻4 小时前
20242817-李臻-课下作业:Qt和Sqlite
jvm·qt·sqlite
python算法(魔法师版)4 小时前
.NET NativeAOT 指南
java·大数据·linux·jvm·.net
Excuse_lighttime6 小时前
JVM 机制
java·linux·jvm
蚰蜒螟8 小时前
jvm安全点(二)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞
jvm·安全
DBWYX1 天前
JVM 精华
jvm
jiedaodezhuti2 天前
为什么elasticsearch配置文件JVM配置31G最佳
大数据·jvm·elasticsearch
进击的雷神2 天前
数据库知识全面考查:从基础概念到实战应用
jvm·数据库·oracle
昔我往昔2 天前
除了GC哪些地方有用到安全点
java·jvm·安全