ホームページ >Java >&#&チュートリアル >Java ラムダ式はヒープ割り当てとパフォーマンスに重大な問題を引き起こしますか?
ラムダ式: ヒープ割り当てとパフォーマンスへの影響
Java 8 では、ラムダ式はコードを記述するための簡潔で機能的な構文を提供します。ただし、ラムダ式が実行されるたびにヒープ上に新しいオブジェクトを作成するかどうか、特にコレクションを反復処理する場合に懸念が生じています。
ラムダ式とオブジェクトの作成
従来の匿名クラスアプローチを使用したラムダ式の同等の構文は次のとおりです:
myStream.forEach(new Consumer<Item>() { @Override public void accept(Item item) { // do something useful } });
Inどちらの場合も、コレクションの各要素に対して実行されるアクションを表すラムダ式または匿名クラス インスタンスが作成されます。ただし、主な違いは実装方法にあります。
Java 言語仕様で指定された動作
Java 言語仕様では、ラムダ式は必ずしもラムダ式を作成する必要はないと述べています。評価ごとに新しいオブジェクト。 JVM は、オブジェクトの再利用やキャプチャされた変数に基づく最適化など、ラムダ式の処理方法に柔軟性を備えています。
具体的には、この仕様では次のシナリオが許可されています。
現在の Oracle JVM実装
現在、Oracle の JVM は保守的なアプローチを採用しており、ラムダ式ごとに 1 つのインスタンスを作成します。ただし、値を取得しないラムダ式にはシングルトンが使用されます。これは、ほとんどの場合、ラムダ式を使用してコレクションを反復処理するときに、新しいオブジェクトがヒープに割り当てられないことを意味します。
パフォーマンスへの影響
ラムダ オブジェクトに割り当てられるヒープ領域特に小さなコレクションの場合は無視できます。パフォーマンスへの影響は主に、非シングルトン ラムダ式の場合に新しいオブジェクトを作成するオーバーヘッドに関連していますが、これは多くの場合重要ではありません。
結論
一方、ラムダ式コードを記述するための便利で表現力豊かな方法を提供するため、特に最適化コンパイラーが使用されている場合には、通常、重大なヒープ割り当てやパフォーマンスの問題が発生することはありません。開発者は通常、過剰なオブジェクトの作成やヒープの消費を気にせずにラムダ式を使用できます。
以上がJava ラムダ式はヒープ割り当てとパフォーマンスに重大な問題を引き起こしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。