我正在群集上运行一个大型Java应用程序,并且我有很多内存可用。因此,我打算用一个巨大的最大堆大小启动我的JVM,看看它是否有效。但是我需要多次运行这个,我想知道堆在运行期间实际上有多大。我知道我可以使用像VisualVM这样的工具来做这件事但是如果我不想运行一个基于ui的大应用程序呢?在我的应用程序终止后,是否有一些参数可以发送到jvm来获取这种内存统计信息?或者可能是一个基于命令行的应用程序,可以很容易地做到这一点?
答案 0 :(得分:3)
jstat
就是你所追求的。它将每秒打印统计数据(或您指定的任何内容),然后您可以分析输出以找到最大值。
答案 1 :(得分:2)
您可以在应用程序中执行此操作:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
然后在返回的getCommitted()
对象上使用getUsed()
,getMax()
和MemoryUsage
方法。
答案 2 :(得分:1)
您需要使用以下内容来分析您的应用程序:
http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html#LowMemoryDetection
答案 3 :(得分:1)
U可以使用下面的方法来获取堆大小的值
调用Runtime.getRuntime()totalMemory();
答案 4 :(得分:0)
程序的总使用/空闲内存可以通过java.lang.Runtime.getRuntime();
运行时有几种与内存相关的方法。以下编码示例演示了它的用法。
运行时有几种与内存相关的方法。以下编码示例演示了它的用法。
import java.util.ArrayList;
import java.util.List;
public class PerformanceTest {
private static final long MEGABYTE = 1024L * 1024L;
public static long bytesToMegabytes(long bytes) {
return bytes / MEGABYTE;
}
public static void main(String[] args) {
// I assume you will know how to create a object Person yourself...
List<Person> list = new ArrayList<Person>();
for (int i = 0; i <= 100000; i++) {
list.add(new Person("Jim", "Knopf"));
}
// Get the Java runtime
Runtime runtime = Runtime.getRuntime();
// Run the garbage collector
runtime.gc();
// Calculate the used memory
long memory = runtime.totalMemory() - runtime.freeMemory();
System.out.println("Used memory is bytes: " + memory);
System.out.println("Used memory is megabytes: "
+ bytesToMegabytes(memory));
}
}