gpt4 book ai didi

java - 创建空对象

转载 作者:行者123 更新时间:2023-11-30 11:43:18 24 4
gpt4 key购买 nike

在 Java 中,通常有对象仅用于包装函数并且没有自己的任何状态。示例:

class Foo {
void foo () {
System.out.println("foo");
}

static public void main(String[] arg) {
Foo foo = new Foo();
foo.foo();
}
}

我想知道表达式 new Foo() 是否针对 C++ 中的函数指针赋值进行了优化。这似乎是一件显而易见的事情,但当我想到它时,编译器将不得不检查 foo 是否未用于同步(可能还有其他东西?)。标准对此有任何说明吗?

最佳答案

标准(VM 规范和 JLS)对此没有任何说明,这完全取决于 VM 实现来处理优化。

所有标准都指定了一组需要遵守的不变量。如果 VM 保证你所做的将看起来创建一个对象,然后调用一个方法,然后处理它,它就可以做它想做的事。

尽管优化的具体方式可能有所不同,但在这种低级别上出现瓶颈的情况极为罕见。但是由于优化是在运行时完成的,因此您可以合理地确定它们只会在您的代码被大量调用时才会执行;不经常使用的代码被解释而不是编译成机器代码。 (但即使这可能会因 VM 而异,并且可能取决于特定的命令行选项。)在您的情况下,可能会发生的情况是,在多次运行之后,VM 会完全内联该方法,同时摆脱对象创建和方法调用。

为了“优化”您的代码,您绝对可以做的一件事就是将 Foo(和 foo())声明为 final。

关于java - 创建空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345544/

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