在讨论使用reflection的性能开销时,指出:
使用反射会导致某些运行时优化丢失。例如,以下代码很可能是由Java虚拟机优化的: X= 1;x= 2;x= 3; 使用Field.set*()的等效代码可能不会。
如果没有反射,JVM将进行什么样的运行时优化?
发布于 2013-10-08 17:10:28
许多JIT优化是无法完成的。只要查看JDK源代码,通过反射设置字段值就会涉及到安全性检查和一些查找。
虽然您的问题所概述的关于基本值的直接代码将被抛到几个程序集指令中,但是反射调用给优化器提供的信息很少,因此可以完成的优化很少。
如果对其进行基准测试,您会发现反射比“直接”代码慢一个数量级。
发布于 2013-10-08 16:56:07
在这种情况下,代码可以被丢弃,因为它似乎什么都不做。
如果您使用反射,我怀疑它仍然会做一些事情,尽管您不能使用反射访问局部变量。
https://stackoverflow.com/questions/19253756
复制相似问题