JVM是否可以优化此代码
该代码如何在Java编译器或JVM中得到优化,我专门询问是否要用Java编写此类代码
Stream.of(1, 2, 3)
.map(i -> i + 1)
.map(i -> i + 1)
.map(i -> i + 1);
类似
Stream.of(1, 2, 3)
.map(i -> i + 3)
或者更具攻击性,并用基本的for循环替换它,可能会提高性能。
clojure中有一个换能器的概念,它是一种优化,您可以将可缩减函数组合为一个函数并消除延迟传播的开销。 JVM可以在流利的api中转换某些功能吗?
例如,如果我们有一个Java流的装饰器接口
decor-map(decor-map(base-map (i -> i + 1), i -> i +1), i -> i + 1)
然后,我认为编译可以以某种方式尝试转换装饰器映射。但是在流利的api中怎么可能呢?
答案 0 :(得分:1)
据我所知,Javac实际上并没有做太多优化,实际上只constant folding做了。
换句话说:在将源代码编译成机器代码时,许多其他语言(例如C ++)都直接应用了所有复杂的优化选项……javac并没有做任何事情。
为什么:因为这是在JIT运行时(在有意义的地方)发生的。
结论:您不必担心Java代码在“事物的源代码方面”的性能。您尝试使用简短的方法编写简单的简单代码,以使JIT可以做到神奇并内联所有这些代码,然后将其转换为经过优化以支持您的 actual 使用模式的机器代码。 / p>