【问题标题】:Java - used memory is greater for fewer objectsJava - 更少的对象使用的内存更大
【发布时间】: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


    【解决方案1】:

    当你所做的只是

    new B();
    

    为了分配内存,运行时可以随时恢复分配的空间。您所看到的只是垃圾收集活动模式之间的巧合差异。

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

    【讨论】:

    • 我真的希望我知道这个答案中值得一票否决的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多