内存使用在我的程序中没有改变
Memory usage does not change in my program
给出以下测试 Java 程序内存使用情况的代码:
List<Person> list = new ArrayList<Person>();
for (int i = 0; i <= 10000000; 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);
无论我如何更改 i
的值,输出总是 286046
。但是大 i
意味着大内存使用,对吧?有什么解释吗?
来自 javadoc
Returns the amount of free memory in the Java Virtual Machine. Calling
the gc method may result in increasing the value returned by
freeMemory.
我的猜测是,由于内存是使用大块分配的,因此它总是 return 相同,因为您的内存使用率较低。尝试做一个更高的测试,不要忘记调用垃圾收集器 System.gc();
让你的测试更相关。
勾选这个http://www.tutorialspoint.com/java/lang/runtime_freememory.htm
我也会尝试将最小内存 -Xms
设置得非常低,这样您就有更多机会溢出最小值并强制 JVM 分配更多并减少 freememory
The output is always 286046, no matter how I change the value of i. But large i means large memory usage, right? Any explanation?
当您 gc()
时,list
已超出范围(即不再使用)并且不会保留。尝试将它放在 static
中,因为它不能被丢弃。
注意:如果您使用 -XX:-UseTLAB
,您将获得更准确的内存统计,因为这会禁用并发内存分配,使统计更简单。
给出以下测试 Java 程序内存使用情况的代码:
List<Person> list = new ArrayList<Person>();
for (int i = 0; i <= 10000000; 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);
无论我如何更改 i
的值,输出总是 286046
。但是大 i
意味着大内存使用,对吧?有什么解释吗?
来自 javadoc
Returns the amount of free memory in the Java Virtual Machine. Calling the gc method may result in increasing the value returned by freeMemory.
我的猜测是,由于内存是使用大块分配的,因此它总是 return 相同,因为您的内存使用率较低。尝试做一个更高的测试,不要忘记调用垃圾收集器 System.gc();
让你的测试更相关。
勾选这个http://www.tutorialspoint.com/java/lang/runtime_freememory.htm
我也会尝试将最小内存 -Xms
设置得非常低,这样您就有更多机会溢出最小值并强制 JVM 分配更多并减少 freememory
The output is always 286046, no matter how I change the value of i. But large i means large memory usage, right? Any explanation?
当您 gc()
时,list
已超出范围(即不再使用)并且不会保留。尝试将它放在 static
中,因为它不能被丢弃。
注意:如果您使用 -XX:-UseTLAB
,您将获得更准确的内存统计,因为这会禁用并发内存分配,使统计更简单。