【发布时间】:2017-11-27 09:19:52
【问题描述】:
在 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 标志,而其他人则认为现在应该正式支持。
那么:在 Java 9 中是否仍然可以使用 sun.misc.Unsafe,如果可以,如何使用?
【问题讨论】:
-
没有
java.misc.Unsafe这样的东西。有sun.misc.Unsafe,它受到一般sun.*软件包警告的影响,自 1997 年以来我见过的每个 JDK 版本中都存在这种警告。 -
sun.misc.Unsafe 在 JDK 9 上的工作方式与在 JDK 8 上的工作方式相同。有关所有详细信息,请参阅 JEP 260。你遇到了什么问题?
-
正确的结尾问题应该是,“如果是这样,为什么?”。
标签: java reflection native java-9 unsafe