java - JVM/编译器会优化一个简单的 super 方法调用吗?

标签 java methods super

如果我有

public void methodName() {
super.methodName();
}

编译器/JVM 将如何处理这个?假设签名相同,是否会像从未发生覆盖一样对待它?我想把这段代码作为意图的澄清,这样人们就不会想知道为什么 hashCode() 没有在与 equals() 相同的类中实现>

如果它对系统有影响,也许不会。

最佳答案

嗯,通常问题是“JVM/编译器可以优化这个特定的方法调用吗?”不同于“Will it optimize said call?”,但您的实际问题是不同的。

你真正的问题是“我应该担心这个委托(delegate)调用的性能吗?”这更容易回答,因为它是一个明确的“不,别担心”。

首先,无论方法调用是否得到优化器的特殊处理,单次调用的成本都可以忽略不计。这真的没关系。

之所以会讨论调用优化,并不是因为调用本身太昂贵,而是因为内联方法调用可以通过将调用者的代码和被调用者的代码作为一个单元进行分析来实现后续优化。显然,这与覆盖方法的普通代码无关。它只有在优化器要考虑调用者的上下文时才变得相关,并且如果发生这样的内联操作,那么单个委托(delegate)步骤确实与优化器不匹配。这种优化的结果确实是“好像覆盖从未发生过”(这也适用于许多不那么微不足道的场景)。

但如果发生这种情况,则取决于几个周围条件,包括代码是否是与性能相关的热点的问题。如果不是,可能会发生调用未得到优化的情况,但这仍然不应该打扰您,因为这与性能无关。

关于java - JVM/编译器会优化一个简单的 super 方法调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33045086/

相关文章:

Java - 根据不同纪元的外部设备的时间戳计算时间

java - 在 IDE (Eclipse) 的 LogCat 中没有捕获异常的 StackTrace(由 ACRA)

java - Java 中的自动检测字符编码

python多重继承在 super 上下文中调用重写函数

javascript - 如何以及为什么在代码中使用 SUPER?

java - 从子类返回数据

java - 我应该如何在 Cassandra 中存储日期间隔?

asp.net - 如何在 ASP.Net 中执行 <form method ="get"> 搜索表单?

java - 如何将方法包装在异步代码部分周围

objective-c - NSInvocation 类上的 setSelector 方法的目的是什么?