Java 8 のメソッド参照キャッシュによりパフォーマンスは向上しますか?

Patricia Arquette
リリース: 2024-11-17 06:27:03
オリジナル
862 人が閲覧しました

Does Method Reference Caching in Java 8 Offer Performance Gains?

Java 8 でのメソッド参照のキャッシュ

Java 8 では、インスタンス メソッドとコンストラクターを参照するための簡潔な構文を提供するメソッド参照が導入されました。ただし、これらの参照をキャッシュすることが有益かどうかについては懸念があります。このトピックを理解するには、同じ呼び出しサイトを頻繁に実行するためにメソッド参照をキャッシュすることと、異なる呼び出しサイトでメソッド参照を複数回使用するためにメソッド参照をキャッシュすることを区別することが重要です。

メソッド参照のキャッシュ同じ呼び出しサイトの場合

Foo.func() が繰り返し呼び出される次のコードを考えてみましょう。 doSomethingWithAFunc():

class Foo {

   Y func(X x) {...} 

   void doSomethingWithAFunc(Function<X,Y> f){...}

   void hotFunction(){
        doSomethingWithAFunc(this::func);
   }

}
ログイン後にコピー

this::func をキャッシュすると、hotFunction() が実行されるたびに新しい匿名クラス インスタンスが作成されなくなると考えられます。ただし、JVM は、ラムダの最初の呼び出し時に作成された呼び出しサイト インスタンスを再利用することで、このシナリオをすでに最適化しています。この場合、メソッド参照のキャッシュは不要です。

異なる呼び出しサイトのメソッド参照のキャッシュ

対照的に、次の例を考えてみましょう。

Runnable r1 = System::gc;
Runnable r2 = System::gc;
ログイン後にコピー

ここでは、2 つの異なる呼び出しサイトが、java.lang.System 内の同じターゲット メソッド System.gc() へのメソッド参照を生成します。 JVM はそれらの間で単一のラムダ インスタンスを共有できますが、Java 8 の現在の実装では共有できません。これは、ラムダ インスタンスのキャッシュを維持することによるパフォーマンス上の利点が不確実であるためです。

ベスト プラクティス

これらの考慮事項を考慮すると、通常、メソッド参照をキャッシュすることは、次の場合を除き推奨されません。これらは、測定を通じて特定された特定のパフォーマンス上の懸念事項です。キャッシュはプログラムの実行動作を変更する可能性があるため、次の場合にのみ考慮する必要があります。

  • 同じメソッドを参照する呼び出しサイトが多数ある場合
  • ラムダはコンストラクターまたはクラスの初期化で作成され、

    • 複数によって同時に呼び出されます。スレッド
    • 最初の呼び出し中にパフォーマンスの低下が発生します

以上がJava 8 のメソッド参照キャッシュによりパフォーマンスは向上しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート