如果我创建 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 Kepler
最佳答案
当你所做的只是
new B();
为了分配内存,运行时可以随时恢复分配的空间。您所看到的只是垃圾收集 Activity 模式之间的巧合差异。
您创建的每个“B”对象立即成为垃圾回收的候选对象。
关于Java - 对象越少,使用的内存就越大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077025/