gpt4 book ai didi

java - Java 编译器可以为非静态方法做早期绑定(bind)吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:18 25 4
gpt4 key购买 nike

假设我有以下类(class):

public class MyClass {
public void doSomething() {
System.out.println("doing something.");
}
}

让我们进一步假设,我的项目所做的就是调用 .something() 方法。没有压倒一切或任何其他有趣的事情发生。

MyClass myObj = new MyClass();
myObj.doSomething();

javac 编译器是否注意到此方法调用未被覆盖,并将绑定(bind)优化为“早期绑定(bind)”?我是出于好奇才问的;在任何真实世界的应用程序中,我当然会在我的代码中到处添加 finalstaticprivate

最佳答案

字节码编译器(如 javac)通常不会为实例方法调用做早期绑定(bind):

  1. Java 的类分离编译模型意味着这种优化只能在类调用其方法之一时应用。 (如果 javac 假设进行跨类的早期绑定(bind),更改和重新编译一个类可能会导致绑定(bind)不正确。)

  2. 没有太多值(value),因为 JIT 编译器(或 AOT 编译器生成器)是执行大多数优化的地方。

现代 JVM 中的 JIT 编译器根据已加载的完整类集(到目前为止)进行广泛的优化。这包括优化方法调度和内联方法调用。此外,JIT 编译器足够智能,可以跟踪关键优化,并在动态加载新类等导致先前优化无效时重新编译。

关于java - Java 编译器可以为非静态方法做早期绑定(bind)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56972122/

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