簡體   English   中英

Java - 哪些對象被垃圾收集?

[英]Java - which objects are being garbage collected?

我的應用程序有很多垃圾收集,我想分析一下。 我想看到的是哪些對象被垃圾收集。 我想這會讓我知道在哪里尋找優化(添加緩存或其他)。

是否有打印詳細GC信息的選項,包括每個類中有多少對象被垃圾收集?

我正在使用G1GC,如果這很重要的話。

謝謝!

這有答案: 如何打印java類垃圾收集事件?

您需要使用參數運行JVM

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

Oracle的JFR (Java飛行記錄器,或Java任務控制)是一個很好的工具來幫助完成這項任務 - 它顯示每個對象的GC負載 - 意味着生成每個類的對象數量(這與收集的對象一起使用) )。 非常推薦。

我不確定G1GC,但通常我發現VisualVM工具包非常有用。 這是一個很好的功能組合,足夠深入的對象分析以及良好的速度(早期很多GC工具都很糟糕)。 它也是一個免費的工具。

http://visualvm.java.net/download.html

要跟蹤垃圾收集活動,請使用以下命令:

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

我會稍微改變一下 - 你不是想知道哪些對象正在被收集,而是哪些對象占用了堆(但是在下一次GC之后收集了)。

有許多工具可以讓你檢查堆中的對象和類,如上面的Alex Suo所提到的VisualVMJProfiler (很好但是付費用於應用程序), YourKit (相同)或jmap。 使用其中任何一個,我會定期記錄堆狀態,您可以使用詳細的垃圾收集日志進行交叉引用。

根據您的應用程序,您還可以使用詳細的垃圾收集日志以及應用程序的活動日志(這些活動會導致堆中明顯的跳轉,尤其是在以后發生GC時出現類似降低的情況),從而取得相當大的進展。 即使您使用上述工具,您的活動日志也可能對於識別內存使用的來源至關重要。

暫無
暫無

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

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