为什么scala在编译后生成了太多的类文件?

时间:2016-12-07 07:04:18

标签: scala

我在Scala项目中工作,在编写和编译Scala代码后,我在目标文件夹中看到了几个类文件。 我很想知道它为什么会创建太多的类文件? 有什么特别的原因吗?

1 个答案:

答案 0 :(得分:9)

Scala编译器肯定会创建许多额外的模块,以使其成为jvm表示的方式。例如,在版本2.11中,它创建:

  1. 每个lambda表达式.class
  2. 每个.classobject
  3. package object
  4. 每个.class的{​​{1}}已实施方法
  5. 每个专业化的trait,例如

    .class

    它将为所有class Foo[@specialized(Long, Double) A, @specialized(Long, Double) B] x (Long, Double, AnyRef)组合创建3 * 3 = 9个不同的类。

  6. 但是这些问题肯定会在这些问题上得到解决。

    Scala 2.12作为(Long Double, AnyRef)的要求,由于jdk 8 lambda表示和接口默认方法,需要减少1和3的开销。

    Dotty's Linker具有autospecialization功能,只会为您的代码生成所需的专业化,并且可以大大减少4的麻烦。