首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >newInstance() vs new

newInstance() vs new
EN

Stack Overflow用户
提问于 2009-03-15 02:04:32
回答 3查看 11.5K关注 0票数 26

调用newInstance()是否有代价,或者它的底层机制是相同的吗?newInstance()在新关键字*上有多少开销?

*:忽略newInstance()暗示使用反射的事实。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-15 03:17:17

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

这不是任何类型的微基准测试。

这是Windows7 x86测试版上的JDK 1.6.0_12。

鉴于Constructor.newInstance将非常类似于Class.forName.newInstance,我想说,考虑到您可以使用newInstance而不是new获得的功能,开销几乎是微不足道的。

像往常一样,你应该自己测试一下。

票数 17
EN

Stack Overflow用户

发布于 2009-03-15 02:19:22

要小心微基准测试,但我发现了this blog entry,在那里有人发现使用JDK1.4时,new的速度大约是newInstance的两倍。这听起来是有区别的,而且正如预期的那样,反射速度更慢。然而,听起来这种差异可能不会破坏交易,这取决于新对象实例的频率与正在完成的计算量。

票数 1
EN

Stack Overflow用户

发布于 2013-08-31 05:15:46

这是不同的-在10倍内。绝对差异很小,但如果写入低延迟应用程序,累积的CPU时间损失可能会很大。

代码语言:javascript
运行
复制
    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);

输出:

代码语言:javascript
运行
复制
T: 105
T: 11

测试平台为至强W3565 @3.2 1.6,Java1.6

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/647111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档