来自 C/C++ 的人提出的基本性能问题。
我使用 Collection ( ArrayDeque
) 来简单地按身份保存、添加、删除项目。我知道合同是供equals()
在检查相等性时使用的集合,例如在 期间remove(obj)
,但在我的情况下,我想使用引用语义(如 IdentityHashMap 但不需要地图)。所以我很高兴知道我永远不会覆盖equals()
集合中保存的任何对象(它被声明为保存一个接口)。
来自本机编程的我不禁问自己,编译后的代码是否会remove(obj)
遍历项目并执行虚拟调用只是Object.equals()
为了比较地址?由于我正在存储接口引用,因此无法(?)使用它来优化它,final
因此编译器不会费心进行无用的调用(即内联它们) - 但现在我领先于自己,因为它可能是这样的无论如何都不需要优化,并且 JVM 有其他方法(去虚拟化?)在这种情况下生成最佳代码。
假设我的代码需要首先考虑这方面可以获得的优化级别 -我的理解是否正确?这种情况下有什么好的设计?