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));
}
}
2条答案
按热度按时间kse8i1jr1#
首先,如前所述,在“任务管理器”中,查看进程的详细信息,并确保您查看的是工作集,而不是内存提交大小(虚拟内存)。
然后,下面是一个列表(从我的头)的东西,在JVM进程中,不会算作java堆,其他人可能能够添加到列表(或可能减去或详细说明):
但是我同意你的观点,如果你真的在看工作集,这听起来有点大。在高负载下,我们通常在32位resin服务器上使用1-1.5 GB的非java堆内存(Debian Linux)。
h9vpoimq2#
一个程序的总的已用/空闲内存可以在程序中通过java.lang.Runtime.getRuntime()得到;
运行时有几个与内存相关的方法。下面的代码示例演示了它的用法。