在Java 8源代码中,我们可以找到在
Class
类内部实现的JIT优化方法。/*
* Private constructor. Only the Java Virtual Machine creates Class objects.
* This constructor is not used and prevents the default constructor being
* generated.
*/
private Class(ClassLoader loader) {
// Initialize final field for classLoader. The initialization value of non-null
// prevents future JIT optimizations from assuming this final field is null.
classLoader = loader;
}
所以,这个构造函数从未被调用,但JIT将通过这个技巧“欺骗”。
我的问题是:它是否可以以稍微不同的方式实现,比如说
private Class() {
classLoader = (ClassLoader)(new Object());
}
这是毫无意义的逻辑,但是如果构造函数永远不会被调用,那有什么关系呢?
这种技巧是否也可以防止JIT进行优化?
classLoader
字段吗? - Andremoniy