JVM 如何在内部对对象执行空检查
how JVM perform null check on an object internally
JVM 如何在内部对对象执行空值检查。
假设某个方法 return 是一个对象。java 如何在内部执行此空值检查?
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 使用了许多技巧,例如
- 分支预测,几乎从未被采纳的分支可以被跳过并有效地并行检查。
- 零页可以取消映射,导致使用时出现分段错误。 IE。这导致没有内联代码,但信号处理程序可以计算出哪一行代码触发分段错误并导致它抛出 NullPointerException。
- 运行时的分析可以确定字段不能为空,例如因为对
null
进行了显式检查,或者因为它在代码中使用了不止一次。这意味着不需要检查每次访问。
JVM 如何在内部对对象执行空值检查。 假设某个方法 return 是一个对象。java 如何在内部执行此空值检查?
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 使用了许多技巧,例如
- 分支预测,几乎从未被采纳的分支可以被跳过并有效地并行检查。
- 零页可以取消映射,导致使用时出现分段错误。 IE。这导致没有内联代码,但信号处理程序可以计算出哪一行代码触发分段错误并导致它抛出 NullPointerException。
- 运行时的分析可以确定字段不能为空,例如因为对
null
进行了显式检查,或者因为它在代码中使用了不止一次。这意味着不需要检查每次访问。