Сообщение Re[6]: Причины популярности java от 23.05.2022 16:30
Изменено 23.05.2022 16:35 vsb
Re[6]: Причины популярности java
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, vsb, Вы писали:
НС>>>Серьезно?
vsb>>Я про стандартную библиотеку.
НС>А это не стандартная
JNA? нет, не стандартная.
vsb>>>>Ещё есть забавный прикол. Для mmap в жаве есть интерфейсы. Но закрыть MappedByteBuffer невозможно.
НС>>>sun.nio.ch.DirectBuffer.cleaner()?
vsb>>Тогда уж sun.misc.Unsafe#invokeCleaner
НС>Это хак через рефлекшен. А вот то что я привел — вполне себе публичный АПИ.
sun.* это внутренний API, а с включенными модулями вообще недоступен. Ну или напиши полный код, а то я тебя не очень понимаю пока. Вот пример моего кода:
vsb>> но этот способ в будущих ждк отрубят, и сейчас по-моему надо специальные флаги прописывать, чтобы оно работало. С "невозможно" написал некорректно, невозможно сделать "правильно", без хаков.
НС>Ну так вроде тебе сказали почему. Хотя вот в дотнете сделать у MMF Dispose это не помешало.
А я ответил, что это плохая реализаия, т.к. валит всю виртуальную машину при попытке обращения к отмапленной памяти. Разыменование null-а не валит, например.
НС>Здравствуйте, vsb, Вы писали:
НС>>>Серьезно?
vsb>>Я про стандартную библиотеку.
НС>А это не стандартная
JNA? нет, не стандартная.
vsb>>>>Ещё есть забавный прикол. Для mmap в жаве есть интерфейсы. Но закрыть MappedByteBuffer невозможно.
НС>>>sun.nio.ch.DirectBuffer.cleaner()?
vsb>>Тогда уж sun.misc.Unsafe#invokeCleaner
НС>Это хак через рефлекшен. А вот то что я привел — вполне себе публичный АПИ.
sun.* это внутренний API, а с включенными модулями вообще недоступен. Ну или напиши полный код, а то я тебя не очень понимаю пока. Вот пример моего кода:
var path = Path.of("/Users/vbezhenar/Downloads/ticket.pdf");
var fileChannel = FileChannel.open(path);
var mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());
var b0 = mappedByteBuffer.get(0);
System.out.println(b0);
var theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafeField.setAccessible(true);
var unsafe = (Unsafe) theUnsafeField.get(null);
unsafe.invokeCleaner(mappedByteBuffer);
var b1 = mappedByteBuffer.get(1);
System.out.println(b1);
vsb>> но этот способ в будущих ждк отрубят, и сейчас по-моему надо специальные флаги прописывать, чтобы оно работало. С "невозможно" написал некорректно, невозможно сделать "правильно", без хаков.
НС>Ну так вроде тебе сказали почему. Хотя вот в дотнете сделать у MMF Dispose это не помешало.
А я ответил, что это плохая реализаия, т.к. валит всю виртуальную машину при попытке обращения к отмапленной памяти. Разыменование null-а не валит, например.
Re[6]: Причины популярности java
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, vsb, Вы писали:
НС>>>Серьезно?
vsb>>Я про стандартную библиотеку.
НС>А это не стандартная
JNA? нет, не стандартная.
vsb>>>>Ещё есть забавный прикол. Для mmap в жаве есть интерфейсы. Но закрыть MappedByteBuffer невозможно.
НС>>>sun.nio.ch.DirectBuffer.cleaner()?
vsb>>Тогда уж sun.misc.Unsafe#invokeCleaner
НС>Это хак через рефлекшен. А вот то что я привел — вполне себе публичный АПИ.
sun.* это внутренний API, а с включенными модулями вообще недоступен. Ну или напиши полный код, а то я тебя не очень понимаю пока. Вот пример моего кода:
vsb>> но этот способ в будущих ждк отрубят, и сейчас по-моему надо специальные флаги прописывать, чтобы оно работало. С "невозможно" написал некорректно, невозможно сделать "правильно", без хаков.
НС>Ну так вроде тебе сказали почему. Хотя вот в дотнете сделать у MMF Dispose это не помешало.
А я ответил, что это плохая реализаия, т.к. валит всю виртуальную машину при попытке обращения к отмапленной памяти. Разыменование null-а не валит, например.
НС>Здравствуйте, vsb, Вы писали:
НС>>>Серьезно?
vsb>>Я про стандартную библиотеку.
НС>А это не стандартная
JNA? нет, не стандартная.
vsb>>>>Ещё есть забавный прикол. Для mmap в жаве есть интерфейсы. Но закрыть MappedByteBuffer невозможно.
НС>>>sun.nio.ch.DirectBuffer.cleaner()?
vsb>>Тогда уж sun.misc.Unsafe#invokeCleaner
НС>Это хак через рефлекшен. А вот то что я привел — вполне себе публичный АПИ.
sun.* это внутренний API, а с включенными модулями вообще недоступен. Ну или напиши полный код, а то я тебя не очень понимаю пока. Вот пример моего кода:
var path = Path.of("/Users/user/Downloads/ticket.pdf");
var fileChannel = FileChannel.open(path);
var mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, fileChannel.size());
var b0 = mappedByteBuffer.get(0);
System.out.println(b0);
var theUnsafeField = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafeField.setAccessible(true);
var unsafe = (Unsafe) theUnsafeField.get(null);
unsafe.invokeCleaner(mappedByteBuffer);
var b1 = mappedByteBuffer.get(1);
System.out.println(b1);
vsb>> но этот способ в будущих ждк отрубят, и сейчас по-моему надо специальные флаги прописывать, чтобы оно работало. С "невозможно" написал некорректно, невозможно сделать "правильно", без хаков.
НС>Ну так вроде тебе сказали почему. Хотя вот в дотнете сделать у MMF Dispose это не помешало.
А я ответил, что это плохая реализаия, т.к. валит всю виртуальную машину при попытке обращения к отмапленной памяти. Разыменование null-а не валит, например.