gpt4 book ai didi

java - Iterable.filter() 可以跳过 "constant"(包括短路)谓词的处理吗?

转载 作者:行者123 更新时间:2023-12-01 23:39:43 27 4
gpt4 key购买 nike

我只是查看了 AndPredicate 和 ALWAYS_FALSE 谓词,没有发现任何迹象表明 AndPredicate 注意到 ALWAYS_FALSE 组件自身短路。

如果已知谓词为 ALWAYS_TRUE 或 ALWAYS_FALSE,则似乎可能存在许多优化机会。例如,Iterables.filter(Iterable,Predicate) 是否可以仅返回带有 ALWAYS_TRUE 谓词的输入 Iterable(可能是其不可修改的 View ),以及带有 ALWAYS_FALSE 谓词的空 Iterable?

类似地,对于此类优化,包含 ALWAYS_FALSE 的 AndPredicate 可以被视为 ALWAYS_FALSE(以及带有 ALWAYS_TRUE 的 OrPredicate 等)

此优化是否已经到位,但我在随意搜索中错过了它,或者是否有原因(副作用行为发生了变化?)为什么这不是一个好主意?

最佳答案

这不是一个好主意是有原因的:它最终不会成为“优化”。

具体而言,受此优化影响的用户只占 Predicates.andPredicates.or 用户的一小部分。为了论证的目的,我们假设这是 1%,尽管老实说我认为这可能很慷慨。没有多少用户故意将 ALWAYS_TRUE 传递给 Predicates.or

现在,1% 的人的胜利是否值得为 99% 的人检查优化是否可行?为了加快这 1%,你已经放慢了其他人的速度,而其他人的数量远远超过了加速的用户数量。

JIT 可能会进行足够的内联来确定它可以进行等效的优化 - 即计算出 if 条件始终为 true,并且跳过 if 语句。但 JIT 进行了大量优化,只进行平均而言值得投入时间检查优化是否适用的优化。

关于java - Iterable.filter() 可以跳过 "constant"(包括短路)谓词的处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18151885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com