1. 程式人生 > >怎樣在IDEA中檢視GC日誌

怎樣在IDEA中檢視GC日誌

引言

今天在看書的時候,在講到垃圾收集器與記憶體分配策略的章節時,文中有如下一段程式碼:

public class ReferenceCountingGC {
    public Object instance = null;

    private static final int _1MB = 1024 * 1024;

    private byte[] bigSize = new byte[2 * _1MB];

    public static void main(String[] args) {
        ReferenceCountingGC objA =
new ReferenceCountingGC(); ReferenceCountingGC objB = new ReferenceCountingGC(); objA.instance = objB; objB.instance = objA; System.gc(); } }

在之後,書中在給出的執行結果中貼出了完整的垃圾回收結果,如下:

[GC (System.gc()) [PSYoungGen: 6763K->4872K(38400K)] 6763K->4880K(125952K), 0.0293377 secs] [Times: user=0.00 sys=0.00, real=0.03 secs] 
[Full GC (System.gc()) [PSYoungGen: 4872K->0K(38400K)] [ParOldGen: 8K->4721K(87552K)] 4880K->4721K(125952K), [Metaspace: 3435K->3435K(1056768K)], 0.0040781 secs] [Times: user=0.00 sys=0.01, real=0.00 secs] 
Heap
 PSYoungGen      total 38400K, used 998K [0x00000000d5b00000, 0x00000000d8580000, 0x0000000100000000)
  eden space 33280K, 3% used [0x00000000d5b00000,0x00000000d5bf9b38,0x00000000d7b80000)
  from space 5120K, 0% used [0x00000000d7b80000,0x00000000d7b80000,0x00000000d8080000)
  to   space 5120K, 0% used [0x00000000d8080000,0x00000000d8080000,0x00000000d8580000)
 ParOldGen       total 87552K, used 4721K [0x0000000081000000, 0x0000000086580000, 0x00000000d5b00000)
  object space 87552K, 5% used [0x0000000081000000,0x000000008149c710,0x0000000086580000)
 Metaspace       used 3447K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 376K, capacity 388K, committed 512K, reserved 1048576K

System.gc()應該只是用於提醒虛擬機器來進行垃圾回收而已,並不會直接輸出資訊才是,而且這個方法也沒有任何返回,是不可能直接被列印輸出的,那麼這些資訊從哪裡而來呢?

GC日誌與如何在IDEA中檢視

在實際敲了一遍程式碼並且跑了一遍之後,發現也確實如之前所想的一樣,是並沒有任何輸出的。但是在書的後面的部分中提到了GC的日誌,於是便在網上查了一下,發現這些資訊的確應位於GC的日誌中。

接下來又嘗試了一下該如何檢視GC的日誌,我平時所用Java的IDE是IDEA,發現直接在IDE中即可直接檢視GC日誌,這裡將我的做法貼在這裡以作參考。

在這裡插入圖片描述
首先是,開啟run選項卡中的Edit Configurations。
在這裡插入圖片描述


之後,便是在剛剛開啟的Run/Debug Configurations中點選左上角的加號,然後選"Application",然後在左邊詳細資訊中,將Main class設定為想要檢視GC日誌的類(需要完整的路徑,包括其所在的包,如圖中的learning_java.book.ReferenceCountingGC),然後在下面的VM options中輸入-XX:+PrintGCDetails,最後點選OK儲存設定即可。

這時,再到我們剛剛要輸出GC日誌的類中,執行一遍程式,便可以看到輸出的日誌資訊了。