【发布时间】:2010-07-21 00:23:42
【问题描述】:
我在代码的某种性能关键区域中使用了newInstance()。
方法签名是:
<T extends SomethingElse> T create(Class<T> clasz)
我将Something.class 作为参数传递,我得到一个SomethingElse 的实例,它是用newInstance() 创建的。
今天我回来从列表中清除了这个性能 TODO,所以我对new 运算符与newInstance() 进行了几次测试。我对newInstance() 的性能损失感到非常惊讶。
我在这里写了一点:http://biasedbit.com/blog/new-vs-newinstance/
(对不起,自我推销......我会把文字放在这里,但这个问题会变得不成比例。)
我想知道的是,为什么 -server 标志会在创建的对象数量大幅增长而不是“低”值(例如 100 或 1000)时提供如此高的性能提升。
我确实从整个反射的事情中吸取了教训,这只是对 JVM 在运行时执行的优化的好奇,尤其是使用 -server 标志。另外,如果我在测试中做错了什么,我会感谢您的反馈!
编辑:我添加了一个预热阶段,结果现在更加稳定。感谢您的意见!
【问题讨论】:
-
博文有moved again。
标签: java performance reflection instantiation