什么是 FullGC

什么是 FullGC

一、基础概念

Full GC(全局垃圾回收) 是指 清理整个Java堆内存(包括年轻代和老年代)以及方法区(元空间) 的垃圾回收过程。它是Java虚拟机中最耗时、对应用性能影响最大的一种垃圾回收操作,通常会导致应用程序线程的暂停

二、详细解释

要深入理解 Full GC,我们需要先了解Java内存模型和垃圾回收的基本分代理论

1. Java堆内存的分代

a、年轻代 (Young Generation)

新创建的对象首先被分配在这里。年轻代又分为一个 Eden区 和 两个 Survivor区

Eden区【伊甸园】:新创建的对象绝大部分都分配在这里,当Eden区被填满时,会触发一次 Minor GC【每呢 GC】

Survivor区【幸存者区】:是年轻代的一部分,专门用来存放在一次 Minor GC【每呢 GC】 后仍然存活的对象

b、老年代 (Old Generation)

从年轻代晋升过来的对象:在 Survivor区【幸存者区】经历了多次 Minor GC【每呢 GC】 后仍然存活的对象

大对象:如果对象非常大(比如很长的数组或字符串),可能会直接分配在老年代(避免在Eden和Survivor区之间进行大量复制)

c、老年代 (Old Generation)

方法区是一个线程共享的内存区域,它存储的是已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

三、Full GC 的核心触发条件

1. 老年代空间不足(最常见)

具体场景:

年轻代对象晋升:Minor GC【每呢 GC】 后,存活对象需要晋升到老年代,但老年代空间不足

大对象直接分配:大对象(如大数组)直接进入老年代,但空间不足

四、命令行工具

1、实时监控 GC 情况

jstat -gcutil 1s

2、将堆内存 dump 下来

jmap -dump:format=b,file=heap.hprof

3、查看堆内存分布

jmap -heap

五、使用以下工具分析 dump 文件

JVisualVM

JConsole

GCViewer(分析GC日志) -

六、合理的JVM参数配置

基础堆设置

-Xms4g -Xmx4g # 堆大小固定,避免动态调整

-Xmn2g # 年轻代大小(一般为堆的1/2到1/3)

幸存区优化

-XX:SurvivorRatio=8 # Eden与Survivor比例

-XX:MaxTenuringThreshold=15

元空间设置

-XX:MetaspaceSize=128M

-XX:MaxMetaspaceSize=256M

GC策略选择

-XX:+UseG1GC # G1收集器

-XX:MaxGCPauseMillis=200 # 目标暂停时间

监控和诊断

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/path/to/dumps

相关推荐

【日历】1月1日是什么日子
365bet下载地址

【日历】1月1日是什么日子

📅 10-10 👁️ 8134
古代对女性的二十多种称呼|
bt365娱乐线

古代对女性的二十多种称呼|

📅 12-30 👁️ 6751
dnf时光的轨迹升级b套 “dnf”时光的轨迹套装怎么样?时光的轨迹如何升级?