bia*_*bit 10 java reflection performance instantiation
我newInstance()在代码的一个性能关键区域中使用.方法签名是:
<T extends SomethingElse> T create(Class<T> clasz)
我Something.class作为参数传递,我得到了一个SomethingElse创建的实例newInstance().
今天我从列表中回过头来清除这个性能TODO,所以我运行了几个new运算符对的测试newInstance().我对性能损失感到非常惊讶newInstance().
我在这里写了一些关于它的内容:http://biasedbit.com/new-vs-newinstance/
(抱歉自我推销......我会在这里放置文字,但这个问题会不成比例.)
我想知道的是,-server当创建的对象数量大幅增加而不是"低"值(例如100或1000)时,为什么标志会提供这样的性能提升.
我确实从整个思考过程中吸取了教训,这只是对JVM在运行时执行的优化的好奇心,特别是对于-server标志.另外,如果我在测试中做错了什么,我会很感激您的反馈!
编辑:我添加了一个预热阶段,结果现在更加稳定.感谢您的投入!
我确实从整个思考过程中吸取了教训,这只是对JVM在运行时执行的优化的好奇心,特别是对于-server标志.另外,如果我在测试中做错了什么,我会很感激您的反馈!
首先回答第二部分,您的代码似乎是Java微基准测试的经典错误,而不是在进行测量之前"预热"JVM.您的应用程序需要运行几次执行测试的方法,忽略前几次迭代...至少在数字稳定之前.原因是JVM必须做很多工作才能启动应用程序; 例如,加载类和(当它们运行几次时)JIT编译花费大量应用程序时间的方法.
我认为"-server"产生影响的原因是(除其他外)它改变了决定何时进行JIT编译的规则.假设对于"服务器",JIT越快越好,启动速度越慢,但吞吐量越高.(相比之下,"客户端"被调整为推迟JIT编译,以便用户更快地获得工作GUI.)