java是否优化了多个逻辑;不是";ot";“不相等”;用不同的方法?

java是否优化了多个逻辑;不是";ot";“不相等”;用不同的方法?,java,optimization,boolean,Java,Optimization,Boolean,让我们看看下面的示例代码(修改为具有私有字段): 。。。 等等,如果JVM或编译器优化了位于不同方法中的多个“not”?这不是由javac优化的,但是如果JIT编译器知道StupidNot.notEqual在StupidNot的加载子类(如果有的话)中永远不会被重写,它可以很容易地进行优化。然后,notEqual将内联到另一个notEqual中,内联后将执行此优化 如果StupidNot类有子类,并且其中一些重写了notEqual方法,那么JIT编译器仍然有可能基于类型配置文件优化此情况(例如,

让我们看看下面的示例代码(修改为具有私有字段):

。。。
等等,如果JVM或编译器优化了位于不同方法中的多个“not”?

这不是由javac优化的,但是如果JIT编译器知道
StupidNot.notEqual
StupidNot
的加载子类(如果有的话)中永远不会被重写,它可以很容易地进行优化。然后,
notEqual
将内联到另一个notEqual中,内联后将执行此优化

如果
StupidNot
类有子类,并且其中一些重写了
notEqual
方法,那么JIT编译器仍然有可能基于类型配置文件优化此情况(例如,如果已知在大多数情况下您使用的是
StupidNot
类,而不是使用其子类)。在这种情况下,JIT编译器将向
另一个notEqual
方法添加快速类型检查,该方法(如果成功)将使用内联
notEqual
,否则将使用慢速虚拟调用


也不要忘记,
另一个notequal
也可以内联到其他方法中,因为它非常简单。

如果
javac
这样做了,我会非常惊讶;最简单的方法是反编译类文件。JIT可能会。然而,这是一个微观优化——编写最适合您的代码的东西。是的,我也怀疑JVM会这样做,因为它几乎严格地将方法的代码附加到类对象上(除非您使用代码注入)。一个编译器,内联后的优化会做什么:D会做什么。但这显示了一个普遍的问题,即嵌套到不同类的代码(尤其是独立开发的代码)如何使代码变得肥沃。看看真实的例子——有人编写了一个类,例如isEmpty,另一个在其方法中使用了复杂的布尔语句,等等,我在真实的软件中看到了多达5(!)个级别的此类不良布尔语句。更确切地说,你为什么要首先使用第一个方法?当您可以只使用!=运算符直接执行。@EJP有几个可能的原因。在谓词中使用它作为方法引用,或者可能是反射。。。(只是说这是合理的)Javac肯定不会这么做,但是JIT肯定会这么做。问题是:“它”是什么?那就是:“优化”在哪方面?例如,JIT将内联
notEqual
方法。如果有任何疑问,可以查看JIT代码。
 public class StupidNot{
 private Object a,b;
 ...
 public boolean notEqual(){
       return a!= b;
 }
}
 public class AnotherStupidNot{
 private StupidNot sn;
 private Whatever obj;

 public boolean anotherNotEqual(){
       return  ! sn.notEqual() && obj.someBoolean()
 }
}