Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过编译器或JIT进行java优化_Java_Compiler Optimization - Fatal编程技术网

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

通过编译器或JIT进行java优化,java,compiler-optimization,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()”,或者编译器/J

我不时看到这样的代码:

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会执行这样的优化吗?

我当然不希望JIT或编译器会执行这样的优化。它必须知道:

  • 结果在两次调用之间不会“有用地”更改
  • 每个方法调用都会生成单独的数组,这一事实没有任何用处
  • 每个方法调用都会生成不同的字符串对象,这一事实没有任何用处
JIT或编译器似乎不太可能为此进行优化


是的,使用第二种形式肯定更有效——我认为它也更具可读性。当可读性更强的代码也更高效时,这就非常清楚地指示了要使用哪种代码;)

优化引擎可以提高所用算法的性能,但(据我所知)不能用另一个算法替换代码。如果这不仅仅是一个理论问题,而是您确实需要优化代码,我将完全避免使用regexp-able split方法。使用
indexOf
查找“:”和两个
子字符串
调用来提取id的每一部分应该比这两种方法都快得多。首先测量,然后获得硬数据,而不是挥动手臂。。。。我有时会觉得人们期望编译器比现在更聪明。@OddBeck:你为什么不测试你给出的实际代码?当然,这会更简单、更有用。@jarnbjo:这会让人惊讶——而且很容易观察到,只需比较参考文献即可。我很想看到它正在发生的证据。@jarnbjo:是的,但这也是可能的,因为结果真的,真的不能相互区分。对于
String.split
,情况并非如此。