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

Odd*_*eck 4 java compiler-optimization

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

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

做类似的事情不是更好(也更快)

String [] ids = id.split(":");
if (ids.length > 1) {
  sub_id = ids[1];
  parent_id = ids[0];
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 10

我当然不希望任何的JIT 编译器做执行这样的优化.它必须知道:

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

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

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