首頁 >Java >java教程 >反射對 Java 效能有多大影響?

反射對 Java 效能有多大影響?

Patricia Arquette
Patricia Arquette原創
2024-12-05 04:19:14466瀏覽

How Much Does Reflection Impact Java Performance?

反射會影響 Java 效能嗎?

使用反射來建立對象,而不是直接呼叫類別建構函數,無疑會帶來嚴重的效能損失。反射操作需要動態類型解析,這阻礙了 Java 虛擬機器最佳化。

Java 關於反射的文檔承認了這種效能差異:「因為反射涉及動態解析的類型,所以無法執行某些 Java虛擬機器最佳化...反射操作的效能比非反射操作的效能慢。

結果:
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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn