【发布时间】:2017-06-25 03:30:54
【问题描述】:
在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 进行这种优化?
【问题讨论】:
-
我无法完全想象它被用在原生代码之外的任何地方,特别是因为它不是类型安全的构造函数。
-
@Makoto
classLoader你的意思是字段? -
不,我的意思是这个私有构造函数。我在任何 Java 库中都找不到它的用途,我怀疑我们凡人会想要使用它,因为它不是类型安全的
Class实例。请记住:Class定义为Class<T>。 -
我很抱歉,但这个事实与我的问题有什么关系?我在问关于 JIT 优化如何阻止工作的方法?
-
好的,我将删除关于
volatile的部分问题,看起来有点傻
标签: java optimization java-8 jit