2014-01-12 108 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代,然后动态缩小和增长。