gpt4 book ai didi

Java 内联优化是否正确?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:07:05 24 4
gpt4 key购买 nike

所以我刚刚看到这段代码在工作,作者告诉我这是为了内联优化。

Class Test{
...
void init(){
//sets variables, call functions, etc
}
...
}

然后他像这样在main中调用它

Test t=new Test();
t.init();

而不是在默认构造函数中包含 init() 中的代码。他告诉我这是为了内联优化。这个对吗?它如何更快?我在哪里可以读到这方面的信息?

最佳答案

它并没有更快。它似乎基于可以内联方法但不能内联构造函数的假设。不幸的是,这是胡说八道,所以它的全部意义都被抛在脑后了。

即使这样更快,也几乎肯定是个坏主意。不应以牺牲可读性为代价来优化代码,除非在每个最后一个 CPU 周期都至关重要的极端情况下,在这种情况下您不太可能使用 Java。

事实上,这比更难阅读更糟糕。接下来的重构必然是Test构造函数调用init()方法,这样就不用总是手动完成了(手动完成是如果它被遗忘,会带来痛苦和潜在的错误来源);如果构造函数调用可以被重写的方法,这是一种不好的做法,因为子类可能会无意中更改调用父类(super class)构造函数时在构造时发生的事情(有关更多详细信息,请参见 this question)。发生这种情况时,同一包中的 Test 的子类将能够覆盖 init() 方法,然后当子类调用 super(),无论是隐式还是显式,父类(super class)的构造函数最终都会调用重写 init()。 (这个特殊的问题可以通过将 init() 声明为 private 来解决。)

不要这样做。

关于Java 内联优化是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27802538/

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