【发布时间】:2019-02-06 05:57:50
【问题描述】:
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 中有一个transducer 的概念,它是一种优化,您可以将可reduce 函数组合成单个函数并消除延迟传播的开销。 JVM可以在一个fluent api中转换一些函数吗?
例如,如果我们有一个用于 Java 流的装饰器接口
decor-map(decor-map(base-map (i -> i + 1), i -> i +1), i -> i + 1)
然后我假设编译可以以某种方式尝试转换装饰器映射。但是在一个流利的 api 中这怎么可能呢?
【问题讨论】:
-
Clojure 也是一种 JVM 语言。您的意思是“Java 编译器如何优化该代码”?
-
@ernest_k Oracle/OpenJDK Java 编译器通常不会进行大量优化,而是选择在 JIT 期间在 JVM 级别完成。 JVM 会在现在或将来的版本中进行这些优化并非没有道理。
-
@yshavit 我明白这一点。我的问题是澄清 OP 是否宁愿询问编译时优化。
-
@ernest_k 好的,抱歉。我以为您是在暗示 只有 Java 编译器可以做到这一点。 :-)
-
编辑了我的问题。我对 Java 和 JVM 如何优化这段代码很感兴趣
标签: java optimization jvm compiler-optimization