newInstance()vs new

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

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

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

这不是任何微观基准。

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

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

一如既往,你应该自己测试看看。

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

有区别 – 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上测试