直到 Java 8 才可以获得单例 sun.misc.Unsafe
通过如下方法实例:
public static Unsafe getUnsafe() {
try {
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
return (Unsafe) f.get(null);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
尽管强烈建议不要使用 Unsafe
,许多供应商和图书馆在内部使用它。
现在,有了 Java 9 和 Jigsaw,我认为这也是如此 Unsafe
处理方式已经改变。我读了一些带有相反信息的帖子。有人说它已完全隐藏,甚至无法检索,有人说必须启用 VM 标志,而另一些人则说它现在应该得到正式支持。
那么:是否还可以使用 sun.misc.Unsafe
在 Java 9 中,如果是,如何实现?
最佳答案
不仅获取它的方式保持不变,而且还添加了更多方法。问题是,现在这是一个 promise ,它将在未来某个时候被删除;这次是肯定的。
现在还有两个,一个:sun.misc.Unsafe
和jdk.internal.misc.Unsafe
。顺便说一句,第一个是要删除的。
第二个也可以在 java-9 中获得,但只能使用特殊键 addExports:java.base/jdk.internal.misc=ALL-UNAMED
(但强烈建议不要这样做) 。
发生的变化是,许多公共(public)方法已被修补或添加,以便您不再需要使用它,例如 AtomicInteger#weakCompareAndSet
并没有执行您的操作会期望。
关于java - 在 Java 9 中还可以使用 sun.misc.Unsafe 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47507418/