|
|
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
Вот есть у нас JNA, и она позволяет делать функции на жаве, которые вызываются из си-шного кода. Делается это путем регистрации каллбека, для этого в регистрирующую функцию передается указатель на явовский метод. но ведь в яве есть такая штука, как garbage collection, которая иногда перемещает объекты. То есть - в яве вызывается gc, gc перемещает объекты, а в нативном коде указатели-то остаются старые! Как эту проблему решать? запретом gc "двигать" объекты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:35:51 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
Оно точно именно так и происходит? GC перемещает объекты. Указатели на Java методы (если они вообще существуют, я себе это как-то слабо представляю), живут себе в пермгене и никуда не двигаются. Могут разве что совсем собраться. Можно пример кода увидеть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:42:15 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
У меня серьезные подозрения, что в калбеке указатель на Java метод, это не поинтер в какую-то область памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:44:07 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
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 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:55:39 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
P.S. Так что есть две методы: - нотифицировать ссылающихся на колбек в finalize() методе - прописать в CDS конкретные классы (что не хорошо в общем случае) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:57:17 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
Большой Синий КитЧтобы GC не собирало объекты этот класс, можно прописать в CDS :) Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:58:17 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
Большой Синий Кит- нотифицировать ссылающихся на колбек в finalize() методе У автора проблема с "перемещением указателя", а не со сборкой. Экземпляр колбэка можно просто к статическому полю прибить. Большой Синий Кит- прописать в CDS конкретные классы (что не хорошо в общем случае) Какое отношение к этом имеют классы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 16:59:52 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Виноват, можно только смапить в read-область permgen только инстансы классов, а не сами классы. Да, невнимательно прочел. Я сомневаюсь, что GC как-то "перемещает указатели" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 17:06:35 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
автор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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 17:23:00 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
У автора не "проблема" с "перемещением указателя", а интерес как эта проблема решается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 18:34:42 |
|
||
|
вопрос про callback-и (JNA) из нативного кода
|
|||
|---|---|---|---|
|
#18+
chabapokУ автора не "проблема" с "перемещением указателя", а интерес как эта проблема решается. Проблема решается тем что указатель на Java метод не является указателем на адрес в памяти. Поэтому проблемы с перемещением чего-то там в памяти не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2012, 18:38:15 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37670799&tid=2132518]: |
0ms |
get settings: |
19ms |
get forum list: |
30ms |
check forum access: |
7ms |
check topic access: |
8ms |
track hit: |
64ms |
get topic data: |
24ms |
get forum data: |
6ms |
get page messages: |
111ms |
get tp. blocked users: |
3ms |
| others: | 359ms |
| total: | 631ms |

| 0 / 0 |
