リフレクションは Java のパフォーマンスに影響しますか?
クラス コンストラクターを直接呼び出すのではなく、リフレクションを使用してオブジェクトを作成すると、間違いなく重大なパフォーマンス ペナルティが発生します。リフレクション操作には動的な型解決が必要であり、Java 仮想マシンの最適化が妨げられます。
リフレクションに関する Java のドキュメントでは、このパフォーマンスの違いを認めています。「リフレクションには動的に解決される型が含まれるため、特定の Java 仮想マシンの最適化は実行できません...reflective操作のパフォーマンスは、反射しない操作よりも遅くなります。"
簡単なテストで明らかなことがわかります。差:
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); } }
結果:
このテストにはルックアップとインスタンス化の両方が含まれますが、インスタンス化の結果の分離も含まれることに注意してください。ペナルティ:
したがって、パフォーマンスが低下する可能性がありますが、特定のコンテキストによって異なりますが、リフレクションを使用する場合も重要な意味を持ちます。
以上がリフレクションは Java のパフォーマンスにどの程度影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。