У нас есть концепция указателей в C ++.Теперь, если мы выделим некоторую память в C ++ и передадим ее в Java в качестве ссылки на объект (используя JNI), то кто должен быть и кто будет ее освобождать.
Лучшая стратегия - это обычно иметьРаспределитель также будет тем, кто освобождает данные.
1.) Сборщик мусора делает это автоматически в Java?
Проблема в том, что вы не знаетекогда, если вообще когда-либо, он запустится.
2.) Нам нужно явно выполнить удаление указателя в завернутом методе класса JNI класса завернутых?
Лучше иметьметод release () в Java, а не подразумевает, что C ++ должен удалить его.Возможно, вы захотите, чтобы C ++ перезапускал память.
3.) Или нам следует просто забыть финализировать (поскольку финализаторам нельзя доверять), и Java несет ответственность за вызов кода C ++, который удаляет объект
Если вы имеете в виду, выделите память в Java и передайте ее C ++ для заполнения.Это мое предпочтение.
Я бы использовал, может использовать ByteBuffer.allocateDirect (), и вы можете вызвать ((DirectBuffer) buffer).cleaner().clean();
, чтобы очистить его детерминистически.
Это может упростить переработку памяти, возможно, можно использовать тот же буферна всю жизнь приложения.