
反射會影響 Java 效能嗎?
使用反射來建立對象,而不是直接呼叫類別建構函數,無疑會帶來嚴重的效能損失。反射操作需要動態類型解析,這阻礙了 Java 虛擬機器最佳化。
Java 關於反射的文檔承認了這種效能差異:「因為反射涉及動態解析的類型,所以無法執行某些 Java虛擬機器最佳化...反射操作的效能比非反射操作的效能慢。
結果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class Main {
public static void main(String[] args) throws Exception {
doRegular();
doReflection();
}
public static void doRegular() throws Exception {
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
A a = new A();
a.doSomething();
}
System.out.println(System.currentTimeMillis() - start);
}
public static void doReflection() throws Exception {
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
A a = (A) Class.forName( "misc.A" ).newInstance();
a.doSomething();
}
System.out.println(System.currentTimeMillis() - start);
}
}
|
登入後複製
無反射:35ms
有反射:465ms-
- 請注意,此測試包括查找和實例化,但甚至包括隔離實例化會導致懲罰:
無反射:30ms
- 有反射(一次查找,僅實例化):47ms
- 因此,雖然性能命中率可能會根據具體上下文而有所不同,但在使用反射時仍然很重要。
以上是反射對 Java 效能有多大影響?的詳細內容。更多資訊請關注PHP中文網其他相關文章!