如果我们使用反射,会丢失什么样的运行时优化

Vic*_*tor 9 java reflection

在关于使用反射的性能开销的讨论中,声明如下:

使用反射可能会导致某些运行时优化丢失.例如,以下代码很可能由Java虚拟机优化:

int x = 1;
x = 2;
x = 3;
Run Code Online (Sandbox Code Playgroud)

使用Field.set*()的等效代码可能不会.

如果没有反射,JVM会做什么样的运行时优化?

R.M*_*ler 0

很多JIT优化无法完成。只要查看 JDK 源代码,通过反射设置字段值就涉及到安全检查和一些查找。

虽然您的问题概述的原始值上的直接代码将被编译为一些汇编指令,但反射调用为优化器提供了有关正在发生的情况的很少信息,因此可以进行很少的优化。

如果你对其进行基准测试,你会发现反射比“直接”代码慢一个数量级。