java inline Streams和编译时的<t>可选

时间:2018-01-15 07:08:12

标签: java optimization build java-8

我非常喜欢Java 8的功能,因为它具有可读性,但我担心它们可能会导致性能下降。虽然由于JIT可能不会长期影响应用程序的速度,但它可能会影响内存使用,这是我主要关心的问题之一。 IntelliJ IDEA提供了将Stream API用法转换为循环的选项(单次使用)。 每次构建项目时,有没有办法内联所有这些功能?

例如,如果我使用find("my-record").ifPresent(records::add),我希望这些更改:Optional<Record> find(String)的签名转换为(Nullable)Record find(String),方法调用转换为null -校验。

注意:我知道在流和循环之间存在大量细微差别,但我设计的代码不依赖于实现细节。

1 个答案:

答案 0 :(得分:1)

正如我在评论中链接的所有类似问题所解释的那样,Java8 SDK本身并没有提供在编译期间添加此类优化的方法。

Java 9“Ahead-of-time”编译器可以inline more aggressively

  

这里设想的优化技术包括但不是   限于:快速查找JDK和应用程序类;早   字节码验证;积极的内联,例如,lambda   表达式和其他标准编译器优化; [...]

同样ProGuard做了一些内联:

  

在优化步骤中,ProGuard进一步优化了代码。其中   其他非入口点的优化,类和方法都可以   被设为私有,静态或最终,可以删除未使用的参数,   并且可以内联一些方法。