GC 分类
针对HotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种 是整堆收集(Full GC)
部分收集:不是完整收集整个Java堆的垃圾收集。其中又分为:
-
新生代收集(Minor GC / Young GC) :只是新生代(Eden\S0,S1) 的垃圾收集
-
老年代收集(Major GC / 01d GC) :只是老年代的垃圾收集。
- 目前,只有CMSGC会有单独收集老年代的行为。、注意,很多时候Major GC会和Fu1l GC混淆使用,需要具体分辨是老年代回收还是整堆回收。
-
混合收集(Mixed GC): 收集整个新生代以及部分老年代的垃圾收集。
- 目前,只有G1 GC会有这种行为
-
整堆收集(Full GC): 收集整个java堆和方法区的垃圾收集。
Minor GC
具体分析:
2022-11-02T11:09:43.350+0800: [GC (Allocation Failure) [PSYoungGen: 15360K->2528K(17920K)] 15360K->14340K(58880K), 0.0082268 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
- 2022-11-02T11:09:43.350+0800: 由 -XX:+PrintGCDateStamps 打印而来,发生 GC 的时间
- GC (Allocation Failure) : 发生 GC 的原因
- Allocation Failure : 表示新生代内存不足,无法为新对象分配内存
- PSYoungGen : PS 表示垃圾回收器的类型时 Parallel scavenge 收集器、 Young Gen 表示 回收的区域: Eden + from/to 区
- 15360K->2528K(17920K) : 15360K->2528K GC 回收前后大小。17920K 表示 新生代大小的 9/10 。
- Eden : from : to 的比例为 8:1:1 , 有一个 survivor 区域是空的。
- 15360K->14340K(58880K) :整个堆空间的GC回收情况。 新生代9/10 + 老年代
- 0.0082268 secs : GC 回收的时间
- Times: user=0.00 sys=0.00, real=0.01 secs
- user : 指的是 CPU 工作在用户状态所花费的时间
- sys:指的是 CPU 工作在内核态所花费的时间
- real : 指的是在此次 GC 时间中所花费的总时间
Full GC
具体分析:
2022-11-02T11:10:18.112+0800: [Full GC (Ergonomics) [PSYoungGen: 2558K->0K(17920K)] [ParOldGen: 28674K->27592K(40960K)] 31233K->27592K(58880K), [Metaspace: 4002K->4002K(1056768K)], 0.0275986 secs] [Times: user=0.13 sys=0.00, real=0.03 secs]
- 2022-11-02T11:10:18.112+0800: 发生 GC 的时间
- GC (Ergonomics) : GC 的原因,由于 JVM 的自适应策略导致的
- [PSYoungGen: 2558K->0K(17920K)] : GC 的区域、类型,以及 GC 前后的内存空间。(新生代)
- [ParOldGen: 28674K->27592K(40960K)] : GC 的区域、类型,以及 GC 前后的内存空间(老年代)
- 31233K->27592K(58880K) : 整个堆空间(9/10) GC 前后的内存变化
- [Metaspace: 4002K->4002K(1056768K)] : 元空间 GC 前后变化、
- Times: user=0.00 sys=0.00, real=0.01 secs
- user : 指的是 CPU 工作在用户状态所花费的时间
- sys:指的是 CPU 工作在内核态所花费的时间
- real : 指的是在此次 GC 时间中所花费的总时间
所花费的时间
- sys:指的是 CPU 工作在内核态所花费的时间
- real : 指的是在此次 GC 时间中所花费的总时间
各位彭于晏,如有收获点个赞不过分吧…✌✌✌