[讨论] 关于java反射调用没法使用jvm的jit?
jjshanwei
2012-09-06
今天听到有位前辈说,java反射调用没法使用JIT,如果是这样那java 反射调的性能情何以堪啊, 以前一直以为反射慢是由于要访问类元数据的缘故。
特在群里咨询下? java反射真的不能用上jvm的JIT吗? 求证! |
|
chong_zh
2012-09-07
i don't think so.
|
|
xiaoyu
2012-09-07
jjshanwei 写道 今天听到有位前辈说,java反射调用没法使用JIT,如果是这样那java 反射调的性能情何以堪啊, 以前一直以为反射慢是由于要访问类元数据的缘故。
特在群里咨询下? java反射真的不能用上jvm的JIT吗? 求证! 反射前几次调用(如果你保存了Method等), 是使用了Native实现的(性能也不咋地), 所以... 当调用次数到了一定的阀值后, 会自动生产字节码类, 里面大概就变成了这样: ((TargetClass) target).targetMethod(arg1, arg2).... 所以... 其实会被JIT优化的(其实就是正常调用了). 如果你不保存Method 等 ,就不会被优化了 |
|
337240552
2012-09-10
之前课本和查资料上是这么说的,反射会没办法做些优化,你google下看看,或许现在好多了
|
|
RednaxelaFX
2012-09-12
楼主或许可以先参考一下我之前的一篇笔记:http://rednaxelafx.iteye.com/blog/548536
在JVM层面未来还有优化的余地,或许可以进一步提高反射调用的性能;例如或许可以在更多的情况下连参数数组的包装都消除掉。组里有同事正在考虑这个问题。 |