簡體   English   中英

如何查看Java中垃圾收集的對象?

[英]How to see what objects have been garbage collected in Java?

請問,有沒有辦法獲取在Java中垃圾收集的對象(它們的變量或至少是類名)的歷史記錄?

只需添加這些參數(到Oracle JVM)

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

沒有以字節為單位提供任何其他內存。 這對我來說是非常有限的幫助。 感謝所有回復。

注意:添加finilize()方法的解決方法對我來說並不是一個不幸的選擇(我無法訪問它)。

您可以使用Objectfinalize方法。 當對象即將被GCed時調用此方法。 從這里,您可以記錄您需要的信息。

免責聲明:我的公司開發了我在這個答案中推薦的工具。

JProfiler中,您可以轉到內存部分中的“已記錄對象”視圖,並將活動模式切換為垃圾回收對象(查看 - >更改活動模式 - >垃圾收集對象)。 然后,您將看到已經GCed的對象的統計信息。

在此輸入圖像描述

當對象實際被刪除時, 弱引用幻像引用似乎對記錄有用。 本文中 ,解釋了該技術。

你在尋找內存泄漏嗎?

如果你實現了finalize()方法(在每個Object中都可用),它將在對象被垃圾收集之前被調用 - 你可以在其中運行任何代碼。

如果您正在尋找一個系統的解決方案(或者您無法訪問要監視的類),我不知道有任何JVM選項允許這樣做。 但是,您可以記錄正在加載和卸載的類(GCed),但這不是您要求的。

JDK中有一個很好的內置工具,用於在運行時觀察jvm。 這是jvisualvm。 屏幕截圖有一個很好的參考: http//visualvm.java.net/description.html

這是其中之一: 在此輸入圖像描述

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM