我非常喜欢Java 8的功能,因为它具有可读性,但我担心它们可能会导致性能下降。虽然由于JIT可能不会长期影响应用程序的速度,但它可能会影响内存使用,这是我主要关心的问题之一。 IntelliJ IDEA提供了将Stream API用法转换为循环的选项(单次使用)。 每次构建项目时,有没有办法内联所有这些功能?
例如,如果我使用find("my-record").ifPresent(records::add)
,我希望这些更改:Optional<Record> find(String)
的签名转换为(Nullable)Record find(String)
,方法调用转换为null -校验。
注意:我知道在流和循环之间存在大量细微差别,但我设计的代码不依赖于实现细节。
答案 0 :(得分:1)
正如我在评论中链接的所有类似问题所解释的那样,Java8 SDK本身并没有提供在编译期间添加此类优化的方法。
Java 9“Ahead-of-time”编译器可以inline more aggressively。
这里设想的优化技术包括但不是 限于:快速查找JDK和应用程序类;早 字节码验证;积极的内联,例如,lambda 表达式和其他标准编译器优化; [...]
同样ProGuard做了一些内联:
在优化步骤中,ProGuard进一步优化了代码。其中 其他非入口点的优化,类和方法都可以 被设为私有,静态或最终,可以删除未使用的参数, 并且可以内联一些方法。