Эквивалентный код для GCHandle.Alloc () в Java? - PullRequest
0 голосов
/ 22 июля 2011

Я работаю над переносом библиотеки C DLL на Java, используя JNA.Библиотека предоставила оболочку C #.В конструкторе оболочки C # создается объект, и память объекта закрепляется с помощью

this.m_object = _CreateObject();
this.m_objectGCH = GCHandle.Alloc(this.m_object, GCHandleType.Pinned);

m_object - целое число, указывающее на созданный объект, а память объекта - с помощью GCHandle.Alloc ().Я могу создать объект и получить указатель на объект с помощью JNA.Однако я понятия не имею, как закрепить объектную память в Java.

1 Ответ

0 голосов
/ 27 июля 2011

Java GC не знает о выделенной памяти для вашего объекта. Если вы несете ответственность за удаление памяти в будущем, вы должны сделать это явно в своем Java-коде, вызывая любой «бесплатный» метод, рекомендованный вашим объектом.

Если вам нужно убедиться, что Java не выполняет GC для данного Java объекта, то вам нужно убедиться, что на него есть ссылка, пока он вам больше не нужен (самый простой способ сделать это - хранение его в статической (классовой) переменной).

...