java - 可读性与性能

标签 java performance code-readability

最近我们在工作中讨论了局部变量对 Java 代码的性能和可读性的影响。我的一些同事认为像这样的声明

new DoSomethingCmd(new SelectionContext(context, keys), infoStuff.getCurrentRole().getRole_id()).execute(getResultContainer());

会给应用程序带来相当大的性能提升。他们愿意为此牺牲代码的可读性。他们这样说对吗?上面的版本比这个版本的性能要好得多吗?

final SelectionContext selectionContext = new SelectionContext(context, keys);
final String roleId = infoStuff.getCurrentRole().getRole_id();
final DeleteSomethingCmd deleteSomethingCmd = new DeleteSomethingCmd(selectionContext,roleId);
deleteSomethingCmd.execute(getResultContainer());

我意识到第一个语句本身并没有那么难掌握,但是当您的大部分代码都采用这样的结构时,复杂性会很快增加。

感谢您的意见。

最佳答案

“优化”版本唯一做的就是堆栈中的变量少了一些,稍微增加了内存消耗。应该仔细衡量性能(google how to benchmark an issue),但我严重怀疑它是否有任何明显的效果。

此外,花时间改进一段不经常使用的代码的性能只会浪费开发人员的时间,这是代价高昂的。

在这种情况下,可读性应该占上风。

编辑:无论如何,如果您使用适当的缩进,我不认为这两个版本在可读性方面有太大差异:

new DoSomethingCmd(
    new SelectionContext(context, keys),
    infoStuff.getCurrentRole().getRole_id()
    ).execute(getResultContainer());

本文的优点是您没有定义不再需要的变量(selectionContextroleId)(因此当您再次阅读该方法时,它们会不要与更多“持久”变量混合)。无论如何,这是可以解释的;最重要的是,除非您有这样做的动机,否则您不应该担心优化。

除此之外,还有一些 Java 编程指南可以为您提供真正有用的技巧(例如使用 StringBuilder 连接字符串)。

关于java - 可读性与性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709334/

相关文章:

java - 创建可分割类

php - 转换为数组 VS is_array()

sql - 完整性检查 : count(*) vs count(pkColumn)

mysql - mysql 中的任何命令等同于 Oracle autotrace 用于性能调优

php - 优化树状控制结构

python - 如何用长字符串干净地保持低于 80 字符的宽度?

java - 如何在 android 中创建具有不同内容类型和布局的 cardview?

java - 获取hibernate和mysql中的所有记录数和前100条记录

java - 如何获取在 JVM 之外运行的任何 Linux/Windows 应用程序的屏幕截图

javascript - 为什么在语法更简洁的情况下使用 javascript 回调?