JVM如何优化流利的api

时间:2019-02-06 05:57:51

标签: java optimization jvm compiler-optimization

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中怎么可能呢?

1 个答案:

答案 0 :(得分:1)

据我所知,Javac实际上并没有做太多优化,实际上只constant folding做了。

换句话说:在将源代码编译成机器代码时,许多其他语言(例如C ++)都直接应用了所有复杂的优化选项……javac并没有做任何事情。

为什么:因为这是在JIT运行时(在有意义的地方)发生的。

结论:您不必担心Java代码在“事物的源代码方面”的性能。您尝试使用简短的方法编写简单的简单代码,以使JIT可以做到神奇并内联所有这些代码,然后将其转换为经过优化以支持您的 actual 使用模式的机器代码。 / p>