我的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上的插件来查看内存使用情况和资源吗?
答案 0 :(得分:0)
理想情况下,你不应该检查这个。更好的方法是查看堆转储。如果您使用的是eclipse,可以下载MAT a link!
答案 1 :(得分:0)
totalMemory
计算可到达和无法访问的对象。解释这个数量的行为需要对垃圾收集有很多了解。
我建议您使用VisualVM。安装VisualGC插件并观察应用程序的内存,分为GC代,动态缩小和增长。