[英]How to see what objects have been garbage collected in Java?
請問,有沒有辦法獲取在Java中垃圾收集的對象(它們的變量或至少是類名)的歷史記錄?
只需添加這些參數(到Oracle JVM)
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
沒有以字節為單位提供任何其他內存。 這對我來說是非常有限的幫助。 感謝所有回復。
注意:添加finilize()方法的解決方法對我來說並不是一個不幸的選擇(我無法訪問它)。
您可以使用Object
的finalize
方法。 當對象即將被GCed時調用此方法。 從這里,您可以記錄您需要的信息。
免責聲明:我的公司開發了我在這個答案中推薦的工具。
在JProfiler中,您可以轉到內存部分中的“已記錄對象”視圖,並將活動模式切換為垃圾回收對象(查看 - >更改活動模式 - >垃圾收集對象)。 然后,您將看到已經GCed的對象的統計信息。
你在尋找內存泄漏嗎?
如果你實現了finalize()
方法(在每個Object
中都可用),它將在對象被垃圾收集之前被調用 - 你可以在其中運行任何代碼。
如果您正在尋找一個系統的解決方案(或者您無法訪問要監視的類),我不知道有任何JVM選項允許這樣做。 但是,您可以記錄正在加載和卸載的類(GCed),但這不是您要求的。
JDK中有一個很好的內置工具,用於在運行時觀察jvm。 這是jvisualvm。 屏幕截圖有一個很好的參考: http : //visualvm.java.net/description.html
這是其中之一:
希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.