2012-02-01 39 views
3

有什麼方法可以讓我們找出Java垃圾收集器是否在應用程序運行時運行?如何知道垃圾收集器是否在我的應用程序運行時期間運行?

保羅

+4

該信息將如何有用?也許你可以從一開始就解釋你的問題。 – 2012-02-02 00:03:08

+1

只是爲了好玩,在你的東西的開頭添加以下內容:new Object(){protected void finalize()throws Throwable {System.out.println(「GC was here!:)」);}}; – Gevorg 2012-02-02 05:21:55

+0

您是否試圖追查瓶頸並懷疑垃圾收集耗盡了您的時間?你有沒有嘗試分析你的程序?探查器將允許您查看正在運行的線程,包括垃圾收集發生的時間和時間。 – Dodd10x 2012-02-02 04:32:25

回答

0

我猜你可以用WeakReference

// beginning of application 
    WeakReference<Object> ref = new WeakReference < > (new Object ()) ; 

// .... 

// end of application 
    if (ref . get () == null) { System . out . println ("gc") ; } 
    else { System . out . println ("no gc") ; } 
1
List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans(); 
for (GarbageCollectorMXBean gcBean : gcBeans) { 
    long numCollections = gcBean.getCollectionCount(); // it's possible for this to return -1 for a given collector 
} 
相關問題