Jiv*_*ngs 10 java jvm java-api
当装载系统类,该<clinit>方法实例化in,out以及err PrintStream变量null使用nullPrintStream()方法:
private static PrintStream nullPrintStream() throws NullPointerException {
if (currentTimeMillis() > 0) {
return null;
}
throw new NullPointerException();
}
Run Code Online (Sandbox Code Playgroud)
我明白为什么会这样,以及为什么变量在加载过程中无法实例化,但我感到困惑的是该方法的内容.
为什么比较currentTimeMillis()来0?在什么情况下,这种比较会回归false?
nullPrintStream()方法的Javadoc给出了一个线索:
但是,不允许编译器内联访问它们,因为它们稍后被initializeSystemClass()设置为更合理的值.
我想这是一个编码黑客,以防止编译器内联一个简单的"返回null"实现.
currentTimeMillis()永远不会小于0.但编译器不够聪明,不知道这一点,因此保留条件语句.