2014-01-12 66 views
0

我遇到了一個與我的java遊戲有關的問題,它使用的內存跳躍了很多。我創建找到多少內存正在使用這個方法:查找內存使用高峯

public String readable(long bytes, boolean si) { 
    int unit = si ? 1000 : 1024; 
    if (bytes < unit) { 
     return bytes + " B"; 
    } 
    int exp = (int) (Math.log(bytes)/Math.log(unit)); 
    String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i"); 
    return String.format("%.1f %sB", bytes/Math.pow(unit, exp), pre); 
} 

readable(Runtime.getRuntime().totalMemory(), true) 

它在最初的200MB開始了,他們跳600米,然後逐漸增加。我將如何監控爲什麼會發生這種情況,並尋找導致此問題的內存泄漏?在eclipse上是否有插件可以安裝以查看內存使用情況和資源?

回答

0

理想情況下,你不應該檢查這個。這樣做的更好方法是查看堆轉儲。如果您使用的是Eclipse,您可以下載MAT a link

0

totalMemory計算可達和不可達對象。解釋這個數量的行爲需要對垃圾收集有很多的理解。

我建議你改用VisualVM。安裝VisualGC插件並觀察應用程序的內存,將其劃分爲GC代,然後動態縮小和增長。