我正在用Java编写模拟,今天我的性能明显下降。我曾经能够在没有等待的情况下进入我的时间步,但现在时间步之间有几秒钟的延迟。通过一些实验,我发现了一条特定的行,当注释掉时,会使程序再次顺利执行。它在下面的代码片段中显示:
public HashMap<String, Gene> childGenes(String parent, Axes axis, boolean daughter1){
HashMap<String, Gene> parentGenes = this.cells.get(parent).getGenes();
HashMap<String, Gene> childGenes = new HashMap<String, Gene>();
switch(axis){
case X:
for(String s: parentGenes.keySet()){
Gene g = parentGenes.get(s);
Compartment comp = g.getLocation().getAP();
/*commenting out this line increases performance*/ if((comp != Compartment.POSTERIOR && daughter1) || (comp != Compartment.ANTERIOR && !daughter1)){
childGenes.put(g.getName(), new Gene(g.getName(), g.getState(), g.getLocation()).populateCons());
}
}
break;
//essentially identical cases for Y and Z here
}
return childGenes;
}
hashmap有大约30个成员,所以这个for循环将执行30次,并且这个方法快速连续调用两次,总共大约60次运行。在计算机术语中,这仍然看起来像小豆,并不像if语句包含任何特别重要的计算 - 对吧? - 但是评论说单行增加了疯狂的表现。会发生什么事?
提前致谢。