1

我知道有办法知道周期或迭代语句的成本,但我想知道两件事:

第一个。 这两个上市哪个更划算?(或者如果有更好的方法,我全神贯注):

更新:然后问题是:他们中的哪两个会正确使用内存/GC?请记住,下一个循环不需要reqObj和的“值”。resObj

for (TransactionLog transactionLog : transactionLogList) {
 RequestObj reqObj = new RequestObj();
 ResponseObj resObj;
 try {

  //do things with these 2 babes and the transactionLog

 } catch (WhateverException ex) {
  log.error("Error in XYZ while doing whatever", ex);
  //execute code without throwing anything up
 } finally {
  reqObj = null;
  resObj = null;
 }
}

或者

RequestObj reqObj = new RequestObj();
ResponseObj resObj;
for (TransactionLog transactionLog : transactionLogList) {
 try {
  //do things with these 2 babes and the transactionLog

 } catch (WhateverException ex) {
  log.error("Error in XYZ while doing whatever", ex);
  //execute code without throwing anything up
 } finally {
  //do something
 }
}

和第二。 我在哪里可以找到一个好地方/书/网站来学习这个“算法最佳实践”和函数 O(letter) 来计算交互的语句成本?

PD:对不起我的英语……他不是很好看。xD

4

2 回答 2

0

本地对象更清晰,更不容易出错,并且垃圾收集器可以很好地处理这些对象。对于像 StringBuilder 这样的可重用对象,您可以在每个周期中清除而不是执行 new StringBuilder,我很惊讶它也成立(有人说)。

正如设置为 null 是初学者的签名一样。

于 2013-02-21T16:53:45.630 回答
-1

如果RequestObj并且ResponseObjAutoCloseable(或者您这样实现它们),那么您应该考虑使用 Java 7 提供的try-with-resources块。它可以处理它们需要或您想要的任何清理,而不需要额外的finally(或中的附加捕获finally,就此而言;这些异常被抑制)。

try( RequestObj reqObj = new RequestObj(); ResponseObj resObj = ... ) {
  // Do stuff

} catch (WhateverException ex) {
  log.error("Error in XYZ while doing whatever", ex);
  // execute code without throwing anything up
} 

// No finally block required

您不应该担心 GC/内存问题,因为在您的情况下这似乎是过早的优化。最好保持你的代码干净和可读。

更多信息:http ://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

于 2013-02-21T18:05:41.337 回答