查找内存使用高峰

时间:2014-01-12 21:28:47

标签: java memory memory-management memory-leaks runtime

我的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开始,他们跳到600m然后逐渐增加。我如何监控这种情况发生的原因并寻找导致此问题的内存泄漏?我可以安装eclipse上的插件来查看内存使用情况和资源吗?

2 个答案:

答案 0 :(得分:0)

理想情况下,你不应该检查这个。更好的方法是查看堆转储。如果您使用的是eclipse,可以下载MAT a link

答案 1 :(得分:0)

totalMemory计算可到达和无法访问的对象。解释这个数量的行为需要对垃圾收集有很多了解。

我建议您使用VisualVM。安装VisualGC插件并观察应用程序的内存,分为GC代,动态缩小和增长。