java - 代码设计: performance vs maintainability

标签 java testing software-design

<分区>

情境化

我正在测试上下文中使用 soot 框架实现字节码检测器,我想知道哪种设计更好。

我正在为我正在检测的类中的每个方法构建 TraceMethod 对象,我想在多个类上运行该检测器。

哪个选项提供更好的性能(时空)?

选项 1:( map )

public class TraceMethod {
    boolean[] decisionNodeList;
    boolean[] targetList;
    Map<Integer,List<Integer>> dependenciesMap;
    Map<Integer,List<Double>> decisionNodeBranchDistance;
}

选项 2:(对象)

public class TraceMethod {
    ArrayList<Target> targets = new ArrayList<Target>(); 
    ArrayList<DecisionNode> decisionNodes = new ArrayList<DecisionNode>();
}

public class DecisionNode {
    int id;
    Double branchDistance;
    boolean reached;
}

public class Target {
    int id;
    boolean reached;
    List<DecisionNode> dependencies;
}

我自己实现了选项 2,但我的老板建议我使用选项 1,他认为这是“更轻量级”。我在这篇文章“Class Object vs Hashmap”中看到 HashMap 使用的内存比对象多,但我仍然不相信我的解决方案(选项 2)更好。

这是一个简单的细节,但我想确保我使用的是最佳解决方案,我关心的是性能(时空)。我知道第二种选择在可维护性方面更好,但如果它不是最佳选择,我可以牺牲它。

最佳答案

一般来说,您应该始终进行维护,而不是为了预期的性能。这有几个很好的理由:

  • 我们往往对数组与 HashMap 之间的速度差异着迷,但在实际的企业应用程序中,这些差异不足以体现应用程序速度的明显差异。
  • 应用程序中最常见的瓶颈是数据库或网络。
  • JVM 在一定程度上优化了代码

由于可维护代码,您的应用程序不太可能出现性能问题。更有可能的情况是,当您拥有数百万行无法维护的代码时,您的老板会用完钱。

关于java - 代码设计: performance vs maintainability,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816774/

相关文章:

java - 具有前瞻功能的正则表达式性能/速度较差

javascript - 断言 testcafe 中是否存在带有特定文本的 td DOM

c# - 委托(delegate)为属性 : Bad Idea?

oop - 适配器模式:类适配器与对象适配器

java - 将存储在数字数组中的数字加一

java - FileReader如何构造FileInputStream和Input Reader?

java - 如何正确重构 Java 方法以进行正确的错误处理

c# - 在 .Net 中测试复杂的 T-SQL 脚本?

testing - 需要一些关于安全测试的信息

scala - 如何在Scala中设计一个简单的监控库?