[英]Why? full gc happen before twice minor gc?
public class Test1 {
public static final int _1MB = 1024 * 1024;
public static void main(String agrs[]) {
gc();
System.out.println("hello world");
}
private static void gc() {
byte[] bytes = new byte[3*_1MB];
byte[] bytes1 = new byte[_1MB];
bytes = null;
byte[] bytes2 = new byte[18*_1MB];
}
}
JDK1.8
-Xms25M -Xmx25M -XX:NewRatio=4 -XX:MaxTenuringThreshold=1 -XX:+UseParallelOldGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
輸出:
0.080: [GC (Allocation Failure) [PSYoungGen: 3677K->496K(4608K)] 3677K->3576K(26112K), 0.0031388 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
0.084: [GC (Allocation Failure) [PSYoungGen: 1520K->0K(4608K)] 4600K->4416K(26112K), 0.0013931 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
0.085: [GC (Allocation Failure) [PSYoungGen: 0K->0K(4608K)] 4416K->4416K(26112K), 0.0009730 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
0.086: [Full GC (Allocation Failure) [PSYoungGen: 0K->0K(4608K)] [ParOldGen: 4416K->1298K(21504K)] 4416K->1298K(26112K), [Metaspace: 2635K->2635K(1056768K)], 0.0027873 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
hello world
為什么在兩次 Minor GC 之前進行 Full GC?
垃圾收集的全部意義在於進行大量次要收集和很少的主要收集。 這是如何發生的當然是一個實現細節,但是這里有很多關於 stackoverflow 的帖子可以說明一些問題。
您所看到的完全正常,只是健康垃圾收集過程的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.