Java でのオブジェクト作成パフォーマンスに対するリフレクションの影響
開発者が Java のリフレクション機能を利用してオブジェクトをインスタンス化する場合、その後のパフォーマンスに関する懸念が生じることがよくあります。意味合い。これらの懸念を評価するために、クラス コンストラクターを直接呼び出すのではなく、リフレクションを使用してオブジェクトを作成すると、パフォーマンスに重大な違いが生じるかどうかを調べてみましょう。
リフレクションに関する Java の公式ドキュメントによると、確かにパフォーマンスに顕著な影響があります。リフレクションには型の動的解決が含まれるため、特定の JVM 最適化は適用できません。これにより、リフレクション操作は非リフレクション操作に比べて本質的に遅くなります。
この違いを定量化するには、次のコード スニペットを考慮してください。
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 < 1,000,000; 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 < 1,000,000; i++) { A a = (A) Class.forName("misc.A").newInstance(); a.doSomeThing(); } System.out.println(System.currentTimeMillis() - start); } } class A { public void doSomeThing() { // Perform some task } }
このコードを Sun JRE 6u10 システムで実行する次の結果が得られます:
これらの結果は、リフレクションを使用するとパフォーマンスが大幅に低下することを示しています。これは、ランタイム クラスの検索とインスタンス化を実行するコストに起因すると考えられます。
複数のオブジェクトをインスタンス化する前にクラス ルックアップを 1 回だけ実行することでリフレクション コードを最適化したとしても、依然としてパフォーマンスは向上します。 hit:
結論として、Java のリフレクションではコンストラクターを直接呼び出す場合と比較して、大幅なパフォーマンスのオーバーヘッドが発生します。リフレクションが必要な特定の使用例もあるかもしれませんが、特にパフォーマンスが重要なアプリケーションでの使用を検討する際には、潜在的なパフォーマンスへの影響を考慮することが重要です。
以上がリフレクションを使用すると、Java でのオブジェクト作成のパフォーマンスにどの程度影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。