[讨论] 关于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层面未来还有优化的余地,或许可以进一步提高反射调用的性能;例如或许可以在更多的情况下连参数数组的包装都消除掉。组里有同事正在考虑这个问题。
Global site tag (gtag.js) - Google Analytics