|
1
60
下面的评论与Sun的实现有关,特别是OpenJDK 6。您的里程可能因其他Java平台实现而异。
实际的调用机制也得到了优化。反射方法的前15次运行(默认情况下)使用JNI调用;在这之后,字节码被生成,调用反射的方法的执行方式与在Java代码中直接调用该方法的执行方式相同。 |
|
|
2
8
我围绕Chris Jester Young的答案进行了一些测试,并使用 冗长的 选项,我确实观察到编译器在第15次调用前后采取了一些操作。如果没有更复杂的测试,很难说是否有很大的性能差异,但它是有说服力的。以下是输出:
我想 调用动力学
|
|
|
3
1
您肯定希望只反射一次方法对象(可能作为私有静态),并将其用于调用,而不是每次都反射出来。除非在编译时不知道缓存映射的名称,否则不要使用缓存映射。 如果它在你的上下文中是合理的,那么你 如果总是使用相同的parm调用(不太可能),则可以挂起parm并(包含其值的参数数组)重用它们。 基于其他答案已经给出的理由,我不会再尝试其他任何事情。 |
|
|
4
0
另外,无论是现在还是将来,Java都很有可能优化字节码,以便在循环中使用时,调用不会比方法调用花费更多。您的“优化”实际上可能会妨碍编译器执行类似操作。(我知道我在含糊其辞,但这已经发生了——很多次)。 |
|
5
0
如果调用的成本低于方法成本的10%,那么就不值得担心了。
|
|
|
JBryanB · 如何从基本抽象类访问类属性 3 年前 |
|
|
Gabe Tucker · 无法在golang中分配接口对象指针 4 年前 |
|
|
jkone27 · F#-在编译时从字符串生成简单的空类型 8 年前 |
|
|
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 8 年前 |
|
|
Randall Flagg · 访问propertyinfo中的属性 8 年前 |
|
|
Kacper · 在反映的全名和成员c后的“*”中,“+”是什么意思# 8 年前 |
|
|
tobeypeters · 反射铸造 8 年前 |
|
|
myst02 · 如何在另一个方法之后调用该方法? 8 年前 |