在关于使用反射的性能开销的讨论中,声明如下:
使用反射可能会导致某些运行时优化丢失.例如,以下代码很可能由Java虚拟机优化:
Run Code Online (Sandbox Code Playgroud)int x = 1; x = 2; x = 3;使用Field.set*()的等效代码可能不会.
如果没有反射,JVM会做什么样的运行时优化?
很多JIT优化无法完成。只要查看 JDK 源代码,通过反射设置字段值就涉及到安全检查和一些查找。
虽然您的问题概述的原始值上的直接代码将被编译为一些汇编指令,但反射调用为优化器提供了有关正在发生的情况的很少信息,因此可以进行很少的优化。
如果你对其进行基准测试,你会发现反射比“直接”代码慢一个数量级。
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |