在好几个地方我都看到了类似这样的声明:
“Scala 编译器在编译代码中尽可能使用 Java 数组、基本类型和 native 算术” (《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;
mem_used (java long):>> 28.811M
mem_used (scala long):>> 36.811M
我意识到 scala Any 类型有额外的开销,但是优化发生在哪里?
请您参考如下方法:
为什么要用这种复杂的方法来尝试找出编译成什么?只需在一个类上运行 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();
}


