Освобождение памяти, завернутой в NewDirectByteBuffer

У меня область памяти, обернутая JNI NewDirectByteBuffer. Я хотел бы запустить код free/release в очистителе ByteBuffer. Есть ли способ сделать это или я должен предложить специальный бесплатный метод, который пользователь должен будет вызвать с помощью ByteBuffer?

Edit

Чтобы уточнить, я сам выделил память и сам вызвал NewDirectByteBuffer. Я хотел бы знать, как я должен координировать очистку с уборщицей.

Ответ 1

Вы используете JNI.newDirectByteBuffer, вы можете и вы должны освободить память вручную, и вы одновременно очищаете работу.

Если вы хотите, чтобы он автоматически очищался, вам нужно следить за жизненным циклом объекта. И если вы только хотите работать с API и не использовать отражение, вы можете использовать PhantomReference с ReferenceQueue и создать поток демонов для опроса очереди. Выполняйте очистку после того, как ссылка будет находиться в ссылочной очереди.