首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑在线与调用方法的效率?

逻辑在线与调用方法的效率?
EN

Stack Overflow用户
提问于 2015-10-03 10:30:40
回答 5查看 949关注 0票数 12

目前,我和我的第二年的JAVA教授有分歧,希望你们能帮我解决这个问题:

我们开始的代码是:

代码语言:javascript
复制
   public T peek()
   {
       if (isEmpty())
       .........
   }
   public boolean isEmpty() 
   {
       return topIndex<0;
   }

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

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

编辑:

谢谢大家的回复!我很感激你们能抽出时间。此外,我也感谢你们中的一些人评论了与我的教授争论的实用主义,尤其是在没有数据的情况下。@迈克邓拉维,我感谢你作为一名前教授的洞察力和你对适当的编码序列的建议。@ya_pulser我特别感谢您花时间分享的分析建议和链接。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-10-03 11:40:19

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

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

  • 手动内联(删除isEmpty方法并将代码放在call place中)
  • 内嵌的java jit编译器(热点后100 k (?)调用-参见jit打印编译输出)
  • 禁用热点内联

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

有用的参数可以是:

  • -Djava.compiler=NONE
  • -XX:+PrintCompilation

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

如果你要创建一些图形作为你的研究结果,并礼貌地将它们呈现给教授--我认为这将在将来对你有益。

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

顺便说一句,当我将大量的方法嵌入到一个巨大的代码循环中,以达到最大速度的神经网络反向传播例程时,我取得了很大的成功。太懒了,以至于不能用方法内联方法。它是不可维护的,而且速度很快。

票数 10
EN

Stack Overflow用户

发布于 2015-10-03 15:25:51

悲伤..。

我同意你对此的直觉,尤其是“几乎在每一种情况下,5-10机器的操作都是微不足道的”。

很久以前我是个C.S.教授。一方面,教授们需要所有你能给他们的放松。教学要求很高。你不会有糟糕的一天的。如果你出现在课堂上,而你没有做好充分的准备,那么你将面临一段艰难的旅程。如果你在星期五考试,周一没有成绩,学生们会说:“但你整个周末都有!”你可以从你的学生学习中获得满足感,但除了如何教学之外,你自己并没有学到多少东西。

另一方面,很少有教授对实际软件有丰富的实践经验。因此,他们的观点往往建立在各种教条主义的确定性之上,而不是坚实的实用主义。

性能就是一个很好的例子。他们倾向于说:“不要做X,做Y,因为它表现得更好。”这完全忽略了性能问题的重点-你必须处理分数,而不是绝对。一切都取决于还发生了什么。接近表现的方法是,就像有人说的,“先做对,然后快做。”

让它变得更快的方法不是盯着代码(并且想知道“我应该这么做,还是应该这么做”),而是运行它并让它告诉您它是如何花费时间的。分析的基本思想是如何做到这一点。现在有了坏的剖析和好的剖析,http://archive.is/9r927 (通常当教授教授教剖析,他们教不好的那种),但这是走的路。

票数 8
EN

Stack Overflow用户

发布于 2015-10-03 10:45:20

正如您所说,差别很小,在大多数情况下,可读性应该是一个更高的优先级。但是,在这种情况下,由于额外的方法由一行组成,除非从其他地方调用相同的方法,否则我不确定这会增加任何真正的可读性好处。

尽管如此,记住您的讲师的目标是帮助您学习计算机科学,这是一个不同的优先事项,编写生产代码。特别是,她不希望您将优化留给自动化工具,因为这无助于您的学习。

另外,在学校和专业发展中,我们都必须坚持我们个人不同意的编码标准。这是一项重要的技能,而且对于团队合作来说也是必要的,即使它确实令人恼火。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32921523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档