我刚刚在阅读有关Scala实现泛型特化的文章时,我发现这个特性大幅提升了其速度,引起了我的关注。我想知道其他面向Java虚拟机的语言还实现了哪些功能,使它们的性能比Java更好?我知道生成代码与Java越远,其性能也越低。所以我真的很想知道一种语言可以实现哪些其他功能,以在Java中实现更好的性能。
请不要回答这个问题,只谈及Scala相对于Java真正优秀的功能。我只是关注性能。
如果您有仍未实现的建议,请回答!
谢谢!
请不要回答这个问题,只谈及Scala相对于Java真正优秀的功能。我只是关注性能。
如果您有仍未实现的建议,请回答!
谢谢!
Scala优化诸如此类的事情
val nullSafeToString = "" + foo
to
val nullSafeToString = String.valueOf(foo)
Java中并不会这样,实际上它看起来像是
val nullSafeToString = new StringBuilder("").append(foo)
这段代码比Scala简单的代码多4倍字节码,并创建了一个新的StringBuilder
实例和一个无用的String
。
一方面,JVM被设计成支持Java计划中要使用的东西,即使JVM只执行字节码。
有些功能(如尾调用)和未经类型检查的语言(InvokeDynamic)已经缺失很久了。
但另一方面,我很惊讶JIT编译器可以轻松优化抽象代码和间接层次,并最终生成与Java代码一样快的代码。
我认为,如果JVM不能通过逃逸分析消除这些简单的implicit
+class RichFoo
模式的实例创建,那么“Pimp My Library”模式不会那么受欢迎。
String a = "a";
String b = "a";
String c = a + b + someUserInput;
实际上会更接近于
String a = "a";
String b = a;
String a_b = "aa";
String c = new StringBuilder(a_b).append(someUserInput).toString();
或许甚至可能(不确定)
String a_b = "aa";
String a = a_b.substring(0,1);
String b = a;
String c = new StringBuilder(a_b).append(someUserInput).toString();