Skip to main content
 首页 » 编程设计

optimization之Scala "primitive"优化

2025年05月04日123yjmyzz

在好几个地方我都看到了类似这样的声明:

“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(); 
}