gpt4 book ai didi

java - 逻辑内联与调用方法的效率?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:40 25 4
gpt4 key购买 nike

我目前与我的二年级 JAVA 教授有分歧,我希望你们能帮助解决:

我们开始的代码是这样的:

   public T peek()
{
if (isEmpty())
.........
}
public boolean isEmpty()
{
return topIndex<0;
}

她希望我们删除 isEmpty()引用并将其代码直接放入 if语句(即将 peek 方法内容更改为: if(topIndex<0)....... ) 到“使代码更有效率”。我认为 a) 运行时/编译时优化器很可能会内联isEmpty() call, b)即使没有,5-10 台机器操作在几乎所有情况下都可以忽略不计,并且 c) 它只是糟糕的风格,因为它使程序的可读性和可变性降低。

所以,我想我的问题是:与仅仅调用方法相比,内联逻辑是否可以提高运行时效率?我尝试过简单的分析技术(又名长循环和秒表),但测试尚无定论。

编辑:

谢谢大家的回复!感谢大家抽出宝贵时间。另外,我感谢你们中那些评论与我的教授争论的实用主义的人,尤其是在没有数据的情况下这样做。 @Mike Dunlavey 我感谢您作为前教授的洞察力以及您对适当编码序列的建议。 @ya_pulser 我特别感谢您花时间分享的分析建议和链接。

最佳答案

你对 java 代码行为的假设是正确的,但是你对你的教授在没有数据的情况下争论是不礼貌的:)。没有数据的争论是没有意义的,用测量和图表证明你的假设。

您可以使用 JMH ( http://openjdk.java.net/projects/code-tools/jmh/ ) 创建一个小型基准并衡量以下各项之间的差异:

  • 手动内联(删除 isEmpty 方法并将代码放在调用位置)
  • 由 java jit 编译器内联(10 万次(?)调用后的热点 - 参见 jit 打印编译输出)
  • 完全禁用热点内联

请阅读http://www.oracle.com/technetwork/java/whitepaper-135217.html#method

有用的参数可能是:

  • -Djava.compiler=NONE
  • -XX:+打印编译

此外,每个 jdk 版本都有自己的一组参数来控制 jit。

如果您将创建一组图形作为您的研究成果,并礼貌地将它们呈现给教授 - 我认为这对您将来会有所帮助。

我认为 https://stackoverflow.com/users/2613885/aleksey-shipilev可以帮助解决jmh相关问题。

顺便说一句:当我将大量方法内联到一个巨大的代码循环中以实现神经网络反向传播例程的最大速度时,我取得了巨大的成功,因为 java 是(曾经?)懒得将方法与方法内联。它无法维护且速度很快:(。

关于java - 逻辑内联与调用方法的效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32921523/

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