Java 9 EA版本已经发布,现在我们可以看到如何使用sun.misc.Unsafe。 我领导了公开运动,以保留对Java 9的访问,该访问最终成功,从而导致对JEP 260的修订。
那么,事情如何结束?
设定
首先,您需要下载 Java 9 EA。 对于IDE,我使用IntelliJ IDEA。 您需要2017年2月27日发布的新的2017.1 Public Preview 。早期版本不适用于Java 9。
jdk.unsupported模块
jdk.unsupported模块中现在提供了sun.misc.Unsafe。 完整的JRE和JDK映像中包含此模块。
这是jdk.unsupported的模块声明:
module jdk.unsupported {exports sun.misc;exports sun.reflect;exports com.sun.nio.file;opens sun.misc;opens sun.reflect;
}
如您所见,sun.misc已导出。
使用它
我有一个示例项目,带有一个包java9unsafe和一个具有相同名称的模块。
要使用Unsafe,您需要将jdk.unsupported添加到代码的模块声明中:
module java9unsafe {requires jdk.unsupported;
}
幸运的是,IDEA将检测缺少的声明,并建议将鼠标悬停在import声明上时为您添加。
然后,您可以使用不安全。 请注意,您必须通过反射间接获取Unsafe实例,否则会收到安全异常
module jdk.unsupported {public class Java9Unsafe {public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {System.out.println("The address size is: " + getUnsafe().addressSize());}@SuppressWarnings("restriction")private static Unsafe getUnsafe() throws NoSuchFieldException, IllegalAccessException {Field singleoneInstanceField = Unsafe.class.getDeclaredField("theUnsafe");singleoneInstanceField.setAccessible(true);return (Unsafe) singleoneInstanceField.get(null);}}
答案是:地址大小为:8
翻译自: https://www.javacodegeeks.com/2017/03/using-sun-misc-unsafe-java-9.html