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任何类型都有额外的开销,但优化发生在哪里?
为什么要花费这么费力的方式试图找出什么被编译成什么?只需在类上运行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)