ホームページ > Java > &#&チュートリアル > Java 8 ラムダ式は反復ごとに新しいオブジェクトを作成しますか?

Java 8 ラムダ式は反復ごとに新しいオブジェクトを作成しますか?

Barbara Streisand
リリース: 2025-01-01 05:25:09
オリジナル
436 人が閲覧しました

Do Java 8 Lambda Expressions Create a New Object for Each Iteration?

Java 8 でのラムダ式のパフォーマンスへの影響

Java 8 のストリーム API を使用してコレクションを反復処理する場合、新しい構文シュガーが導入されましたラムダ式。ただし、「反復ごとにヒープ上に匿名の Consumer オブジェクトが作成されることになりますか?」という疑問が生じます。

Lambda は毎回ヒープ上に新しいオブジェクトを作成しますか?

答えは「いいえ」ですが、それほど単純ではありません。ラムダ式が値を取得しない場合、ラムダ式は基本的に呼び出しごとに再利用されるシングルトンになります。

JVM 実装の詳細

Java 仮想マシン (JVM)ラムダ式を柔軟に実装できます。 Oracle の JVM は現在、ラムダ式ごとに少なくとも 1 つのインスタンスを作成しますが、値をキャプチャしない式に対してはシングルトンを作成します。

パフォーマンスへの影響

この動作はメモリのパフォーマンスに影響します。消費量と実行時間:

  • メモリ消費: ラムダは毎回新しいオブジェクトを作成するわけではありませんが、それでもヒープ領域を占有します。ただし、値のキャプチャのない単純なラムダの場合、このオーバーヘッドは通常最小限です。
  • 実行時間: ラムダ実行のオーバーヘッドは、特にコレクション要素の処理にかかる時間と比較すると、一般に無視できます。

古いスタイルを使用する場合Loop

一般的に、コレクションの反復にはラムダ式を使用することをお勧めします。これは、ラムダ式を使用すると簡潔で読みやすいコードが得られるためです。パフォーマンスが重要な非常に大規模なマルチレベル データ構造の場合は、従来の for ループの使用を検討できます。ただし、データ構造が本当に大規模でない限り、パフォーマンスの違いはわずかである可能性があります。

Java 言語仕様

ラムダ式の動作については、The Java で説明されています。 ® 言語仕様の「15.27.4. ラムダ式の実行時評価」の章。これにより実装の柔軟性が向上し、JVM がメモリ使用量と実行時間を最適化できるようになります。

以上がJava 8 ラムダ式は反復ごとに新しいオブジェクトを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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