Java中的对象创建很慢

时间:2010-08-15 01:32:45

标签: java object

我的经验表明,Java中的对象创建非常缓慢。通常,我只是通过删除对象创建并重复使用相同的对象来优化我的代码。

我想知道其他语言在OOP基础上是否同样缓慢,因为对我而言,面向核心对象的语言需要花费大量时间来创建对象,这是非常反直觉的。

有人在几个语言中对此进行过分析吗?

2 个答案:

答案 0 :(得分:18)

尝试看看你从中获得了什么 - 一些人试图让虚拟机不优化循环:

import java.util.ArrayList;
import java.util.Random;

class DummyInteger {
    private int i;
    public DummyInteger(int i) {
        this.i = i;
    }
    public int getI() {
        return i;
    }
}

public class ObjectCreationTest {

    final static int ITERATIONS = 2000000;
    public static void main(String[] args) {
        Random r = new Random(System.currentTimeMillis());

        int[] randArr = new int[ITERATIONS];
        for(int i = 0; i < ITERATIONS; i++) {
            randArr[i] = r.nextInt();
        }
        DummyInteger[] iArr = new DummyInteger[ITERATIONS];
        long start = System.currentTimeMillis();
        for(int i = 0; i < ITERATIONS; i++) {
            ArrayList<DummyInteger> list = new ArrayList<DummyInteger>(); 
            list.add(new DummyInteger(randArr[i]));
            iArr[i] = list.get(0);
        }
        long end = System.currentTimeMillis();
        System.out.println(String.format("Creating %d objects took %d ms",ITERATIONS*2,end-start));
        int sum = 0;
        for(DummyInteger mi: iArr) {
            sum += mi.getI();
        }
        System.out.println(sum);
        }
}

我得到了

  

创建4000000个对象需要678毫秒

每个物体应该在170纳秒左右。

答案 1 :(得分:9)

虽然在极少数情况下可能会有noticeable CPU impact,但一般情况下,当前虚拟机的对象创建速度与实际情况一样快。

Here是一篇我喜欢的文章,名为“Urban performance legends”,我认为这只是其中一个神话。

另请参阅http://www.javaperformancetuning.com/tips/rawtips.shtml,了解如何调整Java App的性能。

问候。