Scala"原始"优化

Dav*_*vid 2 optimization primitive types scala

我在几个地方看过类似的声明:

"Scala编译器在编译代码中尽可能使用Java数组,原始类型和本机算法"(Scala中的编程书).但实际上我没有看到这一点,例如在下面的代码中,scala类型使用的内存比java类型多(我使用totalMemory和freeMemory方法计算):

long[] la = new Array[java.lang.Long](1024 * 1024);
for(i <- 0 until la.length)
  la(i) = new java.lang.Long(0);

val La = new Array[Long](1024 * 1024);
for(i <- 0 until La.length)
  La(i) = 0l;
Run Code Online (Sandbox Code Playgroud)

mem_used(java long):>> 28.811M

mem_used(scala long):>> 36.811M

我意识到scala任何类型都有额外的开销,但优化发生在哪里?

Dan*_*ral 9

为什么要花费这么费力的方式试图找出什么被编译成什么?只需在类上运行javap,你就会看到它究竟是什么.

C:\>type La.scala
class La {
    val La = new Array[Long](1024 * 1024);
}

C:\>javap La
Compiled from "La.scala"
public class La extends java.lang.Object implements scala.ScalaObject{
    public long[] La();
    public La();
}
Run Code Online (Sandbox Code Playgroud)