Java 这两段代码之间有性能差异吗?

Java 这两段代码之间有性能差异吗?,java,performance,Java,Performance,这两段代码之间有性能差异吗?我的直觉是,第二种选择速度较慢,因为每次都必须构造单元对象,但我喜欢返回单元的想法 备选方案一: //Call to method initiTextDefaultCell(borders); iTextTable.setDefaultCell(iTextDefaultCell); //Other code... private void initiTextDefaultCell(boolean borders) { if (!borders) iTex

这两段代码之间有性能差异吗?我的直觉是,第二种选择速度较慢,因为每次都必须构造单元对象,但我喜欢返回单元的想法

备选方案一:

//Call to method
initiTextDefaultCell(borders);
iTextTable.setDefaultCell(iTextDefaultCell);
//Other code...

private void initiTextDefaultCell(boolean borders) {
  if (!borders)
    iTextDefaultCell.setBorder(Rectangle.NO_BORDER);
  else 
    iTextDefaultCell.setBorder(Rectangle.BOX);
}
备选方案二:

//Call to method
iTextTable.setDefaultCell(initiTextDefaultCell(borders));
//Other code...

private Cell initiTextDefaultCell(boolean borders) {
  Cell iTextDefaultCell = new Cell();
  if (!borders)
    iTextDefaultCell.setBorder(Rectangle.NO_BORDER);
  else 
    iTextDefaultCell.setBorder(Rectangle.BOX);
  return iTextDefaultCell;
}

谢谢

编写一个测试程序,自己看看。

第二个程序(可能)比较慢(但请参见Mnementh的评论)。它所做的一切都是第一个做的,还有更多。但这并不意味着如果你认为它是更好的设计,你就不应该使用它(我倾向于同意)。正如卢所说,这可能不是你的瓶颈。如果您需要确定,请进行测试。

如您所说,由于分配了新对象,选项二的速度会变慢

这看起来像是一个明确的代码与性能决策。我个人认为方案二更清晰,对性能的影响可以忽略不计


然而,如果不知道iTextTable是什么,就很难确定该使用哪个。如果在实例化表时调用一次
initiTextDefaultCell
,那么我会选择选项二,但是如果调用
initiTextDefaultCell
的次数取决于表的大小,那么选项一会更好(假设默认单元格被实例化为
itextable
实例化的一部分)。

hmmm…哪个更慢,10ms还是1ms

选项2会比选项1慢,是的,但即使差异可能是10倍,即使是“高”因素,当慢版本足够快时,人类也不会注意到(使用的数字仅作为示例给出)

性能的第一条规则是,只有在必要时才进行优化。 性能的第二条规则是,设计良好的系统通常具有良好的性能,并且在需要时更易于优化


选项2的可读性更高,设计也更好。这是因为该方法创建了单元格并对其进行了配置。

这看起来不像是您在一个紧密循环中调用的代码。您是否看到了一个性能问题,需要尝试优化此函数?它是否与iText PDF生成器相关?不要太确定。首先e是相同的代码,创建了一个变量iTextDefaultCell ommitted在代码段中(但显然需要它才能运行代码)。因此,这两个选项执行相同的命令,但结构不同。主要区别在于,第一个选项使用一个变量,该变量可以被方法看到。第二个选项将创建此对象本身并返回它。可能它将被优化为相同的本机代码。但没有人可以不测试它就说。您假设iTextDefaultCell只需要为选项1创建。这两个选项都没有显示创建内容,因此有理由认为这两种方式都需要(可能以后需要)。