<分区>
情境化
我正在测试上下文中使用 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)更好。
这是一个简单的细节,但我想确保我使用的是最佳解决方案,我关心的是性能(时空)。我知道第二种选择在可维护性方面更好,但如果它不是最佳选择,我可以牺牲它。