java编译器的优化级别是什么?

时间:2015-10-13 07:37:29

标签: java performance optimization

因此,让我们考虑以下语句在循环内执行超过一百万次。

boolean validity = condition1 || condition2;

可以安全地假设 condition1 condition2 内部的计算非常复杂。因此,由于此处有 OR 运算符,我认为首先分别检查 condition1 是明智的,然后在必要时 condition2 之后就像,

boolean validity = condition1;
if( !validity )
    validity = condition2;

我应该手动执行这样的优化还是java编译器会自动处理这些事情?

2 个答案:

答案 0 :(得分:8)

作为Java语言规范,§15.24说:

  

条件或运算符||运算符类似于|§15.22.2),但仅在其左侧操作数的值为false时才计算其右侧操作数。

因此,语言规范要求 ,只有当左边部分为假时,才会评估右边部分。这不是优化,而是语言的一部分。优化不是语言规范的一部分,它们可以使您的代码更快,但它们永远不应该使您的代码表现不同。然而,如果两个部分都被评估为正确的部分可能会产生副作用,则行为会有所不同。

答案 1 :(得分:-1)

java编译器首先能够执行condition1的功能。如果为true,则不再执行condition2的函数。因此不需要优化。这是因为存在OR操作。