【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参数,如堆大小、垃圾收集器类型等,以优化性能。
相关推荐
瀚高PG实验室4 小时前
瀚高数据库V9.0.5数据脱敏完整配置步骤
jvm·数据库·postgresql·瀚高数据库
阿里云基础软件5 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·人工智能·操作系统·sysom 诊断 skill
wuminyu6 小时前
Kafka的写入延迟与磁盘IO抖动原理分析
java·linux·c语言·jvm·c++
fallwind_of_july7 小时前
JVM 频繁 Full GC 排查思路:从原理到工具实战
jvm
写后端的胖头鱼7 小时前
一文讲懂JVM与调优
jvm·后端·算法·架构·jvm调优
StayInLove1 天前
JVM 内存问题排查方法论
jvm
wuminyu1 天前
Kafka利用sendfile与Page Cache实现高性能传输剖析
java·linux·c语言·jvm·c++
my_realmy1 天前
Java 基础面试笔记(二):JDK、JRE、JVM、JIT 与 JAR
jvm·虚拟机·jit·特性·jre·垃圾回收机制
Nuanyt1 天前
JUC常见核心知识梳理01 线程 并发 JMM volatile 管程 锁 synchronized
java·开发语言·网络·jvm
CodeStats1 天前
【Java 类加载器】Java 类加载器完整体系深度拆解(中):URLClassLoader 能力剖析与继承委派辨析
java·jvm·classloader·类加载器