Mar*_*ger 0 java reflection unsafe native java-9
在 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;
}
Run Code Online (Sandbox Code Playgroud)
尽管强烈建议不要使用Unsafe,但许多供应商和图书馆在内部使用它。
现在,有了 Java 9 和 Jigsaw,我认为Unsafe处理方式也发生了变化。我读了一些带有相反信息的帖子。有人说它已完全隐藏,甚至无法检索,有人说必须启用 VM 标志,而另一些人则写道它现在应该得到正式支持。
那么:是否仍然可以sun.misc.Unsafe在 Java 9 中使用?如果可以,如何使用?
不仅获取方式保持不变,而且还增加了更多的方法。问题是,现在这是一个承诺,它将在未来某个时候被删除;这次是肯定的。
现在还有两个,一个 :sun.misc.Unsafe和jdk.internal.misc.Unsafe。顺便说一句,第一个是要删除的。
第二个也可以在 java-9 中获得,但只能使用特殊密钥addExports:java.base/jdk.internal.misc=ALL-UNAMED(但强烈建议不要这样做)。
发生变化的是,许多公共方法已被修补或添加,以便您不再需要使用它,例如,AtomicInteger#weakCompareAndSet它没有执行您期望的操作。
| 归档时间: |
|
| 查看次数: |
2135 次 |
| 最近记录: |