powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / вопрос про callback-и (JNA) из нативного кода
11 сообщений из 11, страница 1 из 1
вопрос про callback-и (JNA) из нативного кода
    #37670708
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть у нас JNA, и она позволяет делать функции на жаве, которые вызываются из си-шного кода. Делается это путем регистрации каллбека, для этого в регистрирующую функцию передается указатель на явовский метод.

но ведь в яве есть такая штука, как garbage collection, которая иногда перемещает объекты. То есть - в яве вызывается gc, gc перемещает объекты, а в нативном коде указатели-то остаются старые! Как эту проблему решать? запретом gc "двигать" объекты?
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670727
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно точно именно так и происходит? GC перемещает объекты. Указатели на Java методы (если они вообще существуют, я себе это как-то слабо представляю), живут себе в пермгене и никуда не двигаются. Могут разве что совсем собраться. Можно пример кода увидеть?
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670732
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня серьезные подозрения, что в калбеке указатель на Java метод, это не поинтер в какую-то область памяти.
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670768
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javadocAll callback definitions must derive from this interface. Any derived interfaces must define a callback method. You are responsible for deregistering your callback (if necessary) in its java.lang.Object.finalize() method. If native code attempts to call a callback which has been GC'd, you will likely crash the VM. If there is no method to deregister the callback (e.g. atexit in the C library), you must ensure that you always keep a live reference to the callback object.

A callback should generally never throw an exception, since it doesn't necessarily have an encompassing Java environment to catch it.

так что да, GC может финализировать объект, реализующий колбек. Чтобы GC не собирало объекты этот класс, можно прописать в CDS :)
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670771
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Так что есть две методы:
- нотифицировать ссылающихся на колбек в finalize() методе
- прописать в CDS конкретные классы (что не хорошо в общем случае)
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670774
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий КитЧтобы GC не собирало объекты этот класс, можно прописать в CDS :)
Это как?
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670784
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит- нотифицировать ссылающихся на колбек в finalize() методе

У автора проблема с "перемещением указателя", а не со сборкой. Экземпляр колбэка можно просто к статическому полю прибить.

Большой Синий Кит- прописать в CDS конкретные классы (что не хорошо в общем случае)
Какое отношение к этом имеют классы?
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670799
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Виноват, можно только смапить в read-область permgen только инстансы классов, а не сами классы.

Да, невнимательно прочел. Я сомневаюсь, что GC как-то "перемещает указатели"
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37670845
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторPinned and dosed objects are the immovable objects on the Java heap. GC does not move these objects during compaction. These are the major cause of heap fragmentation.
All objects that are referenced from JNI are pinned. All objects on the heap that are referenced from the thread stacks are dosed.
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37671027
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У автора не "проблема" с "перемещением указателя", а интерес как эта проблема решается.
...
Рейтинг: 0 / 0
вопрос про callback-и (JNA) из нативного кода
    #37671033
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokУ автора не "проблема" с "перемещением указателя", а интерес как эта проблема решается.
Проблема решается тем что указатель на Java метод не является указателем на адрес в памяти. Поэтому проблемы с перемещением чего-то там в памяти не существует.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / вопрос про callback-и (JNA) из нативного кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]