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

标签 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 是否会进行此类优化?

最佳答案

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

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

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

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

关于通过编译器或 JIT 进行 java 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15339510/

相关文章:

visual-c++ - 在 VC++ 中,#pragma 等效于/O2 编译器选项是什么(优化速度)

c++ - 是否在 C++ 中访问未从函数可观察行为外部访问的 volatile 局部变量?

java - Android studio中POST请求示例

java - Boolean.TRUE == someMethod(),其中 someMethod() 的返回类型是 Boolean,它返回字面值 true

java - 导入 org.junit.jupiter 无法解析

java - 使用 Java 合并对 Map<String, Map<String, Integer>> 中的数字求和

java - Hadoop:绑定(bind)多个IP地址到集群NameNode

assembly - 既然有了编译器,为什么还需要汇编器呢?

c++ - 任何不将大型开关 block 转换为二叉树的编译器?

gcc - 为什么 -march=native 很少使用?