调用newInstance()是否会受到惩罚,或者下面的机制是否相同? 如果newInstance()对新关键字*?
有多少开销*:折扣newInstance()暗示使用反射的事实。
答案 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上测试