Версия Java 9 EA вышла, и теперь мы можем видеть, как использовать sun.misc.Unsafe. Я возглавил публичную кампанию за сохранение доступа к ней в Java 9, которая в конечном итоге была успешной, что привело к внесению поправок в JEP 260 .
Итак, как все закончилось?
Начало настройки
Для начала нужно скачать Java 9 EA. Для IDE я использую IntelliJ IDEA. Вам нужен новый публичный предварительный просмотр 2017.1, который вышел 27 февраля 2017 года. Более ранние версии не работают с Java 9.
Модуль jdk.unsupported
sun.misc.Unsafe теперь доступен в модуле jdk.unsupported. Этот модуль присутствует в полных изображениях JRE и JDK.
Вот объявление модуля для jdk.unsupported:
1
2
3
4
5
6
7
8
|
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 в объявление модуля вашего кода:
1
2
3
|
module java9unsafe { requires jdk.unsupported; } |
К счастью, IDEA обнаружит декларацию, если она отсутствует, и предложит добавить ее для вас, когда вы наведете указатель на импорт.
Тогда вы можете использовать Unsafe. Обратите внимание, что вы должны косвенно получить экземпляр Unsafe с помощью отражения, в противном случае вы получите исключение безопасности
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
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
Ссылка: | Использование sun.misc.Unsafe в Java 9 от нашего партнера по JCG Грега Лака в блоге Грега Лака . |