Hug*_*ira 33 jvm scala bytecode
根据Scala 2.10,与1.6的默认发射相比,JVM 1.7发射字节码有什么优势(如果有的话)?
rxg*_*rxg 35
以前的Scala版本发出了49.0版本的字节代码,对应于Java 5.使用Scala 2.10版本时,默认值更改为版本50.0,对应于Java 6,其主要优点是激活了该版本引入的更快的验证程序,因此它应该导致(略微)更好的运行时性能.
正如您所注意到的,使用2.10可以发出版本51.0字节的代码,这对应于Java 7.版本50.0和版本51.0之间存在一些差异:最大的是包含invokedynamic指令,以及随之而来的管道(请参阅gory详细信息的类文件格式定义).
就Scala使用51.0字节代码而言,即使技术部分已经到位,我的理解是工作仍处于使用此功能的实验阶段.看看这个EPFL演示文稿和这个线程,它表明团队正在努力获得方法句柄的性能优势,而不必引入对Java 7的依赖.
Scala 2.11保持默认发射版本50.0字节码,但官方计划现在用Scala 2.12直接跳转到Java 8字节码.与此同时,Scala 2.11 还有一个新的后端可以让你试用Scala 2.12原型的一些功能,这些功能将成为Scala 2.12的默认后端.
无论如何,期待已久的建议好处都来自于使用invokedynamic字节码(及其相关的MethodHandle结构).他们包括:
(Spoiler:MethodHandles用于在实验后端实现闭包目前比目前优化的闭包创建要慢!)