Mai*_*r00 10 java optimization jit jvm jvm-hotspot
观看通用VM演示文稿,我研究了这张幻灯片,其中列出了HotSpot JIT所做的所有优化:
在该language-specific techniques部分中有一个去反射.我试图在互联网上找到有关它的一些信息,但失败了.我知道这种优化在某种程度上消除了反射成本,但我对细节很感兴趣.有人可以澄清一下,还是给出一些有用的链接?
是的,虽然它主要在类库中而不是在JVM中实现,但是有一种优化可以降低反射成本.
在Java 1.4 Method.invoke完成对VM运行时的JNI调用之前.每次调用都需要至少两次从Java到Native的转换,再到Java.VM运行时解析方法签名,验证传递的参数类型是否正确,执行装箱/拆箱并为被调用方法构造新的Java框架.所有这一切都相当缓慢.
由于Java 1.4 Method.invoke使用动态字节码生成,如果方法被调用超过15次(可通过sun.reflect.inflationThreshold系统属性配置).负责调用给定特定方法的特殊Java类是在运行时构建的.这个类实现sun.reflect.MethodAccessor其java.lang.reflect.Method委托调用.
生成动态字节码的方法要快得多
请注意,此优化主要在没有JVM帮助的Java代码中实现.HotSpot VM唯一可以实现此优化的方法是跳过此类生成的MethodAccessors的字节码验证.否则,验证者不允许,例如,调用私有方法.
| 归档时间: |
|
| 查看次数: |
947 次 |
| 最近记录: |