确切地说,Scala代码何时执行堆分配?

时间:2014-05-04 02:23:33

标签: scala

我编写了很多高性能的Java代码,过去的经验告诉我,获得最佳性能最重要的事情之一就是要充分了解你对垃圾收集器的负担,并努力减少关键循环中的负载。例如,加密散列函数应该以不会分配任何内存的方式编写。

在Java 1.5之前,很容易确切地知道何时将Java代码编译成执行堆分配的JVM字节码:只有Java源代码中的“new”关键字才会导致堆分配。在Post-Java-1.5之后,你可以看一下新语言特性的“贬低”(比如int-> Integer autoconversion)。

我真的,非常非常难以找到Scala的等效答案,这是一个问题。我错过了吗?在哪里可以找到有关Scala编译器何时生成堆分配字节码的明确,全面的解释?不,scala编译器源代码不是一个答案,因为它随着时间的推移而变化 - 我问的是语言而不是一个特定的编译器。

编辑:忘了提到应用于Strings的Java原语“+”是一个引起堆分配的语言级构造。所以在Java-1.5之前它应该是“new and + -on-String”。

1 个答案:

答案 0 :(得分:0)

我强烈建议您了解JD-GUI程序,它将.class文件反编译成java-ish代码并让您检查它。我已经从Scala代码的编写过程中学到了很多东西。

http://jd.benow.ca/