2016-04-12 14 views
-1

Java 8のLambdasは、問題を文として定義し、コードを簡潔に保つ優れた方法を提供します。しかし、彼らはJVMでステートメントが実行される方法を変更しますか?Java 8ディストリビューション内でのLambdaの実行

私は、オブジェクトのリストをストリームし、条件に基づいてフィルタリングし、フィルタリングされた値を同じデータ型のリストとして返すラムダを書いていると考えます。私のラムダは基本的にフィルターとコレクターを持っています。 このコードをVMに送信すると、コンパイラは従来のifループとforループでラムダ関数を置き換えますか?

これは、仮想マシンがまだ同じで、もともと命令型プログラミングのために設計されているためです。 Java 8では実際に変更されたのは問題文を定義する方法(FP)でした。私の理解は正しいのですか?

+3

http://stackoverflow.com/questions/16827262/how-will-java-lambda-functions-be-コンパイル –

+4

ラムダをストリームパイプラインと混同しているようです。 –

+0

http://stackoverflow.com/a/15241404/2711488 – Holger

答えて

2

コンパイラは、ラムダ関数を「置換」しません。ラムダは、通常のJavaコードとして実行される通常のJavaライブラリに渡される通常のインタフェースのインスタンスになります。

JITは、ラムダコールのインライン化と簡略化の機能について、よりスマートになるように最適化されていますが、そこには魔法はありません。

+0

JITがラムダについて何か知っているのではないかと疑います。 JITは、他のコードと同様にメソッドやクラスで構成されているため、問題のコードがラムダ式に由来するかどうかにかかわらず、既知のパターンを認識しようとします。ラムダ式のコードにのみ潜在的な最適化を適用することは、不要な制限になります。 – Holger

関連する問題