通过编译器或JIT进行java优化

时间:2013-03-11 13:12:27

标签: java compiler-optimization

我不时会看到这样的代码:

if (id.split(":").length > 1) {
 sub_id = id.split(":")[1];
 parent_id = id.split(":")[0];
}

之类的事情会不会更好(也更快)
String [] ids = id.split(":");
if (ids.length > 1) {
  sub_id = ids[1];
  parent_id = ids[0];
}

这样你不必多次调用'split()',或者编译器/ JIT会进行这样的优化吗?

1 个答案:

答案 0 :(得分:10)

我当然不希望 JIT 编译器执行此类优化。它必须知道:

  • 结果不会在通话之间“有用”地改变
  • 没有什么会使用每个方法调用产生单独数组的事实
  • 没有什么会使用每个方法调用产生不同字符串对象的事实

JIT或编译器似乎不太可能为此进行优化。

是的,使用第二种形式肯定更有效 - 而且我认为它也更具可读性。当更可读的代码也更有效时,这是一个非常明确的指示,使用哪些代码;)