2014-09-27 25 views
0

如果我创建100,000个对象,则使用的内存大于用于10,000,000个对象的已用内存。Java - 使用的内存对于更少的对象更大

为什么?

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:

    0.576 KB --->0.016秒

  • 大小= 1000 * 100 * 100:

    0.064 KB --->0.686秒

我用这些值运行程序很多次,我改变了顺序,但结果是sa我。用于100,000个对象的已用内存比用于10,000,000个对象的已用内存大。

详细

  • 的Java 1.7
  • O.S:Windows 7的
  • IDE:Eclipse的开普勒

回答

3

当所有你要做的就是

new B(); 

要分配内存,运行时可以随时恢复分配的空间,只要它想要。你看到的只是垃圾收集活动模式之间巧合的区别。

您创建的每个“B”对象是立即垃圾回收的候选人。

+0

我真的很希望我知道这个答案是什么,值得赞赏。 – Pointy 2014-09-28 03:37:57