ホームページ >Java >&#&チュートリアル >リフレクションを使用すると、Java でのオブジェクト作成のパフォーマンスにどの程度影響しますか?

リフレクションを使用すると、Java でのオブジェクト作成のパフォーマンスにどの程度影響しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-03 08:41:13856ブラウズ

How Much Does Using Reflection Impact Object Creation Performance in Java?

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 システムで実行する次の結果が得られます:

  • 通常のオブジェクトの作成: 35ミリ秒
  • リフレクションを使用したオブジェクト作成: 465 ミリ秒

これらの結果は、リフレクションを使用するとパフォーマンスが大幅に低下することを示しています。これは、ランタイム クラスの検索とインスタンス化を実行するコストに起因すると考えられます。

複数のオブジェクトをインスタンス化する前にクラス ルックアップを 1 回だけ実行することでリフレクション コードを最適化したとしても、依然としてパフォーマンスは向上します。 hit:

  • 通常のオブジェクト作成: 30 ミリ秒
  • 1 回の検索でリフレクションを使用したオブジェクト作成: 47 ミリ秒

結論として、Java のリフレクションではコンストラクターを直接呼び出す場合と比較して、大幅なパフォーマンスのオーバーヘッドが発生します。リフレクションが必要な特定の使用例もあるかもしれませんが、特にパフォーマンスが重要なアプリケーションでの使用を検討する際には、潜在的なパフォーマンスへの影響を考慮することが重要です。

以上がリフレクションを使用すると、Java でのオブジェクト作成のパフォーマンスにどの程度影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。