【发布时间】:2014-11-22 11:53:55
【问题描述】:
如果我创建 100,000 个对象,则使用的内存大于 10,000,000 个对象的使用内存。
为什么?
A.java
public class A {
private static final int size = 1000*100;
public static void main(String[] args) {
double a = getMemoryInKilo();
double start = getTime();
for ( int i = 0 ; i < size ; i++ ) {
new B();
}
double stop = getTime();
double b = getMemoryInKilo();
System.out.println(b-a + " KB ---> " + (stop-start)/1000+" seconds");
}
private static double getTime(){
return System.currentTimeMillis();
}
private static double getMemoryInKilo() {
return (double)(Runtime.getRuntime().totalMemory()- Runtime.getRuntime().freeMemory())/1000;
}
}
B.java
public class B {
private final double k = 0;
private final int a = 1;
private final String s = "123456789";
private final Object o = new Object();
private final Integer i = 10;
}
结果:
-
尺寸=1000*100:
4135.576 KB ---> 0.016 秒
-
尺寸 = 1000*100*100:
2456.064 KB ---> 0.686 秒
我多次使用这些值运行程序并更改了顺序,但结果是相同的。 100,000 个对象的已用内存大于 10,000,000 个对象的已用内存。
详情:
- Java 1.7
- 操作系统:Windows 7
- IDE:Eclipse 开普勒
【问题讨论】:
标签: java performance memory jvm runtime