Scala のファーストクラス関数については、Programming by Scala という本に次のように書かれています。
関数リテラルは、実行時にインスタンス化されると関数値になるクラスにコンパイルされます。
プログラムで多くのファーストクラス関数が使用される場合、これは JVM の PermGen スペースに影響しますか? 単純な関数の代わりに、コンパイラは関数値のバリエーションごとにクラスを生成するためです (たとえば、部分的に適用された関数のさまざまな定義の場合)。
Scala のファーストクラス関数については、Programming by Scala という本に次のように書かれています。
関数リテラルは、実行時にインスタンス化されると関数値になるクラスにコンパイルされます。
プログラムで多くのファーストクラス関数が使用される場合、これは JVM の PermGen スペースに影響しますか? 単純な関数の代わりに、コンパイラは関数値のバリエーションごとにクラスを生成するためです (たとえば、部分的に適用された関数のさまざまな定義の場合)。
JVM ではほとんどすべてのメモリ パラメータを調整できますが、メモリ プロファイルは通常の Java プログラムのプロファイルとは明らかに異なります。
しかし、私が言えることは、1 年間 Scala コミュニティーに深く関わってきたが、これについて不満を言う人を見たことがないということだけです。
これについての根拠はありませんが、重要なプログラムを作成している場合、プログラムの「実際の」データ用に占有されるスペースの量は、いくつかのプログラムが占有するスペースの量よりもはるかに小さいと私は感じています。追加の関数としてのクラス定義。
言い換えれば、私はそれについて心配することはありません。
ファーストクラスの関数を使用して生成するクラスの数が、完全な Spring ディストリビューションでコンパイルされたクラスの数に漸近的に近づくことはできますが、超えることはありません。心配しないでください。これらの先駆者が最初に permgen の問題に対処します。