簡體   English   中英

在編譯庫中查找 System.gc()

[英]Find System.gc() in compiled libraries

我在我們的 gc-log 中看到了明確的 gc 調用(見下文)。 我可以使用 -XX:+DisableExplicitGC 刪除調用,但我真的想知道哪個代碼/庫正在調用System.gc()

關於如何追蹤它的任何提示?

2011-05-30T12:21:48.230+0200: 1.672: [Full GC (System) 1.672: [CMS: 0K->2227K(2868864K), 0.0862299 secs] 62069K->2227K(3118080K), [CMS Perm : 12899K->12893K(409600K)], 0.0863197 secs] [Times: user=0.06 sys=0.03, real=0.09 secs] 

我會使用FindBugs 這是一個很棒的工具,它有一個用於顯式垃圾收集調用的內置規則。

我創建了 System class 的自定義版本,每當調用 System.gc() 時,它都會將堆棧跟蹤寫入文件。 這將允許您跟蹤它被調用的所有地方。

這將在系統中的任何位置找到調用,包括 JDK。

調用 System.gc() 的地方之一是在 RMI 模塊中,以幫助查找丟棄的遠程對象。 您可以減少調用完整 GC 的頻率

-Dsun.rmi.dgc.server.gcInterval=86400000
-Dsun.rmi.dgc.client.gcInterval=86400000

使用分析器。 任何現代分析器都可以幫助您找到這一點。

暫無
暫無

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

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