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上测试