如何测量方法性能的差异
等待雨季的到来
2014-05-14
Hi 各位大大,
小弟请教,比如我想看new与newInstance性能相差多少ns,我应该怎么来做呢? 通过看反汇编好像什么都看不出来,写benchmark的话有什么要注意的坑吗? |
|
等待雨季的到来
2014-05-14
忘了说,非常感谢share里分享的hsdis,非常有用。
|
|
RednaxelaFX
2014-05-14
写microbenchmark无论如何都是邪恶的⋯就看分析结果的人是否能驾驭那邪恶。
最近写Java的microbenchmark很流行用JMH:http://openjdk.java.net/projects/code-tools/jmh/ 楼主也可以搜搜看别人写的例子。 楼主原本是想看new运算符和Class.newInstance()的性能差距么?如果是的话,如果您对比的对象是这样写的: // 1: new operator Object foo = new Foo(); // 2: Class.newInstance() Object foo = Foo.class.newInstance(); 那多半测不出啥有意义的性能差距。Foo.class这里是个常量。HotSpot VM的Server Compiler(C2)会把常量Class的newInstance()优化得跟直接写new一样,所以就算测试出来有那么一丁点的性能差距那也是噪音或者是解释执行的部分没优化的开销。 所以如果楼主关心的对比不是常量Class的newInstance()与new的比较的话,记得不要直接这样写常量喔。 |
|
等待雨季的到来
2014-05-16
感谢R大,我在本机测试了一下,性能相差大概有15倍多,new能达到30亿 TPS。
|
|
RednaxelaFX
2014-05-16
楼主能发一下测试用例的完整代码不?
|