[英]Java - which objects are being garbage collected?
我的應用程序有很多垃圾收集,我想分析一下。 我想看到的是哪些對象被垃圾收集。 我想這會讓我知道在哪里尋找優化(添加緩存或其他)。
是否有打印詳細GC信息的選項,包括每個類中有多少對象被垃圾收集?
我正在使用G1GC,如果這很重要的話。
謝謝!
Oracle的JFR (Java飛行記錄器,或Java任務控制)是一個很好的工具來幫助完成這項任務 - 它顯示每個對象的GC負載 - 意味着生成每個類的對象數量(這與收集的對象一起使用) )。 非常推薦。
我不確定G1GC,但通常我發現VisualVM工具包非常有用。 這是一個很好的功能組合,足夠深入的對象分析以及良好的速度(早期很多GC工具都很糟糕)。 它也是一個免費的工具。
要跟蹤垃圾收集活動,請使用以下命令:
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
我會稍微改變一下 - 你不是想知道哪些對象正在被收集,而是哪些對象占用了堆(但是在下一次GC之后收集了)。
有許多工具可以讓你檢查堆中的對象和類,如上面的Alex Suo所提到的VisualVM , JProfiler (很好但是付費用於應用程序), YourKit (相同)或jmap。 使用其中任何一個,我會定期記錄堆狀態,您可以使用詳細的垃圾收集日志進行交叉引用。
根據您的應用程序,您還可以使用詳細的垃圾收集日志以及應用程序的活動日志(這些活動會導致堆中明顯的跳轉,尤其是在以后發生GC時出現類似降低的情況),從而取得相當大的進展。 即使您使用上述工具,您的活動日志也可能對於識別內存使用的來源至關重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.