JVM如何在内部对对象执行null检查



JVM如何在内部对对象执行null检查。假设某个方法返回一个对象。java是如何在内部执行这种null检查的?

Parent parent=Test.getParent();
if(parent!=null){
A a=parent.getAObject();`enter code here`
if(a!=null){
B b=a.getBObject();
}
}

就Java代码而言,它与非常相似

if (x == null) throw new NullPointerException();
x.useX();

然而,当优化到本机代码时,CPU会使用许多技巧,如

  • 分支预测,一个几乎从未被采用的分支可以被跳过并有效地并行检查
  • 零页面可能会被取消映射,从而在使用时导致分段错误。也就是说,这导致没有代码内联,但信号处理程序可以计算出哪行代码触发分段错误,并导致它抛出NullPointerException
  • 运行时的anaylsis可以确定字段不能为null,例如,因为对null进行了显式检查,或者因为它在代码中多次使用。这意味着不需要对每次访问进行检查

最新更新