2016-12-07 14 views
0

私はScalaプロジェクトで作業しており、Scalaコードを作成してコンパイルした後、私は目的のフォルダにいくつかのクラスファイルを見ました。 なぜクラスファイルが非常に多く生成されるのか不思議です。 具体的な理由はありますか?コンパイル後にscalaが非常に多くのクラスファイルを生成するのはなぜですか?

+3

とのトラブルを減らすことですか?宣言されたクラスごとに*複数のクラスファイル*を意味しますか? –

+0

はい、ソースファイル内の単一クラスの場合でもあります。コンパイラはいくつかのクラスファイルを作成します。 –

答えて

9

Scalaコンパイラは、jvm表現にするための追加モジュールをたくさん作成しています。バージョン2.11で、例えばそれが作成されます。

  1. 各ラムダ式
  2. 実装方法
  3. 各専門用
  4. .classtraitobjectpackage object

  5. .classため.classため.class例えば、

    class Foo[@specialized(Long, Double) A, @specialized(Long, Double) B] 
    

    すべて(Long, Double, AnyRef) x (Long Double, AnyRef)の組み合わせに対して3 * 3 = 9の異なるクラスを作成します。

しかし、これらの問題は確かに昨日修正されています。

Scala 2.12jdk 8と交換すると、SAMラムダ表現とインターフェイスのデフォルトメソッドのために、1と3のオーバーヘッドが低下します。

Dotty's Linkerは、コードのためだけに必要な特殊化を生成しますautospecialization機能を持っており、大幅* *あまりにも多くのファイルがどのようなものです。4.

関連する問題