gpt4 book ai didi

java - 什么时候存储比较结果与重新计算比较在速度方面有意义?

转载 作者:行者123 更新时间:2023-12-04 05:06:22 25 4
gpt4 key购买 nike

我想深入了解何时(忽略可用内存空间)存储比较结果而不是重新计算它是有意义的。证明存储所产生的时间成本合理的临界点是什么?是 2、3 还是 4 次比较?更多?

例如,在这种特殊情况下,哪个选项(通常)在速度方面表现更好?

选项 1:

int result = id.compareTo(node.id);

return result > 0 ? 1 : result < 0 ? -1 : 0;

选项 2:
return id.compareTo(node.id) > 0 ? 1 : id.compareTo(node.id) < 0 ? -1 : 0;

我试图自己分析这两个选项以回答我自己的问题,但我对这种性能测试没有太多经验,因此,宁愿从有更多经验的人那里得到更明确的答案,否则更好地掌握所涉及的理论要素。

我知道这没什么大不了的,而且大多数时候差异可以忽略不计。但是,我是一个完美主义者,我真的很想解决这个特定的问题,这样我才能继续我的生活,哈哈。

此外,我认为答案可能对我将来可能遇到的类似情况有启发性,其中差异可能很大(例如,当无法产生比较或内存分配的成本时,或者复杂到足以导致有关性能的实际问题)。

请回答应该与 Java 编程相关,而不是其他语言。

我知道我已经提到过几次了,但是请仅将答案集中在速度差异上!我很清楚在编写代码时可以而且应该考虑许多其他因素,但在这里我只想要一个直接的论点,哪个更快。

最佳答案

经验告诉我,选项 1 应该更快,因为您只需调用一次 compare 方法并存储结果以供重用。支持这种信念的事实是局部变量存在于堆栈中,并且进行方法调用涉及到堆栈中的更多工作,而不仅仅是将值压入堆栈。然而,分析是比较两种实现的最佳和最安全的方法。

首先要意识到的是,java 编译器和 JVM 一起可以优化您的代码,以便最有效地完成工作(只要遵循某些规则)。有可能在性能上没有区别,也有可能实际执行的不是您认为的那样。
然而,一个真正重要的区别是在调试中:如果在变量存储版本的 return 语句上放置一个断点,则可以看到调用返回的内容,否则在调试器中看不到。更方便的是,当您似乎无用地将方法返回的值存储在变量中,然后返回它时,您可能会在调试时看到方法将返回的内容,否则无法看到它。

关于java - 什么时候存储比较结果与重新计算比较在速度方面有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499194/

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