1

我有一个java应用程序。现在的问题是我使用 jmap 进行了堆,并且我还在我的应用程序中运行了这些代码。两者都给了我不同的值。运行时显示的256mb是我分配的初始内存和最大内存?我想检测是否有任何内存泄漏,但运行时间在波动,而来自堆的内存一直在少量增加?对此有什么帮助吗?

long memory = runtime.totalMemory() - runtime.freeMemory();
System.out.println("\n\nUsed memory is bytes: " + memory);

//Print the jvm heap size.
long heapSize = runtime.totalMemory();
System.out.println("\n\nHeap Size = " + heapSize);

int mb = 1024*1024;
System.out.println("##### Heap utilization statistics [MB] #####");

//Print used memory
System.out.println("Used Memory:" + (runtime.totalMemory() - runtime.freeMemory()) / mb);

//Print free memory
System.out.println("Free Memory:" + runtime.freeMemory() / mb);

//Print total available memory
System.out.println("Total Memory:" + runtime.totalMemory() / mb);

//Print Maximum available memory
System.out.println("Max Memory:" + runtime.maxMemory() / mb);
4

2 回答 2

1

我建议使用Visual VM来观察内存使用情况等。

于 2013-08-27T02:34:55.710 回答
0

或者,您可以尝试 Netbeans 分析器。您可以使用 netbeans 分析器分析您的 Web/独立应用程序。

我们正在联合 netbeans 分析器来分析我们的应用程序。用于分析 java 应用程序的好工具。

一探究竟。

https://profiler.netbeans.org/

http://wiki.netbeans.org/FaqProfilerAttachRemoteServer

于 2013-08-27T02:49:43.707 回答