newInstance()vs new

时间:2009-03-15 02:04:32

标签: java performance reflection

调用newInstance()是否会受到惩罚,或者下面的机制是否相同? 如果newInstance()对新关键字*?

有多少开销

*:折扣newInstance()暗示使用反射的事实。

3 个答案:

答案 0 :(得分:16)

在现实世界的测试中,通过“Constuctor.newInstance”创建一个类的18129个实例,传递10个参数-vs-通过“new”创建实例,程序在时间上没有产生可测量的差异。

这不是任何微观基准。

在Windows 7 x86 beta上使用JDK 1.6.0_12。

鉴于Constructor.newInstance将与Class.forName.newInstance非常相似,我会说,由于使用newInstance而不是new的功能,所以开销几乎不算什么。

一如既往,您应该亲自测试一下。

答案 1 :(得分:1)

警惕微基准测试,但我发现this blog entry有人发现new的速度是JDK 1.4的newInstance的两倍。听起来有点不同,正如预期的那样,反射速度较慢。然而,听起来差异可能不是一个交易破坏者,取决于新对象实例的频率与正在进行的计算量。

答案 2 :(得分:-1)

有区别 - 有10次。绝对差异很小,但如果写入低延迟应用程序累积CPU时间丢失可能很大。

    long start, end;
    int X = 10000000;
    ArrayList l = new ArrayList(X);
    start = System.nanoTime();
    for(int i = 0; i < X; i++){
        String.class.newInstance();
    }
    end = System.nanoTime();
    log("T: ", (end - start)/X);

    l.clear();
    start = System.nanoTime();
    for(int i = 0; i < X; i++){
        new String();
    }
    end = System.nanoTime();
    log("T: ", (end - start)/X);

输出:

T: 105
T: 11

在Xeon W3565 @ 3.2Ghz,Java 1.6上测试