【发布时间】:2018-01-16 11:01:18
【问题描述】:
由于可读性,我非常喜欢 Java 8 的特性,但我担心它们可能会导致性能下降。虽然从长远来看,由于 JIT,它可能不会影响应用程序的速度,但它可能会影响内存使用,这是我最关心的问题之一。 IntelliJ IDEA 提供了将 Stream API 使用转换为循环的选项(用于单次使用)。 有没有办法在我每次构建项目时内联所有这些功能?
例如,如果我使用find("my-record").ifPresent(records::add),我希望这些更改:Optional<Record> find(String) 的签名将转换为(可空)Record find(String),并且方法调用将转换为空检查。
注意:我知道流和循环之间存在大量细微差别,但我将代码设计为不依赖于实现细节。
【问题讨论】:
-
“可能 [...] 它可能会影响内存使用”您是否有任何迹象表明这确实(在很大程度上)适用于您的具体情况?
-
流倾向于创建相当多的对象、循环和“如果”不创建,对吗?此外,有几个基准(看起来可信),其中小型流可以慢 5 倍以上。
-
这意味着此功能会将被调用方法的返回类型从
Optional<Record>调整为Record以及对它的所有调用。这是一个有问题的方法,因为它依赖于使用该功能构建的被调用者的所有依赖项。 -
你真的有性能问题吗?看起来像是过早优化的情况。
-
我会担心
find方法实际上做了什么,而不是它如何返回结果。你肯定看错了。
标签: java optimization build java-8