JNI, сборка мусора и указатели - Java / C ++, кто что должен делать?

У нас есть понятие указателей в C ++. Теперь, если мы выделим некоторую память в C ++ и передадим ее Java в качестве ссылки на объект (с использованием JNI), тогда кто должен быть и кто будет освобождать ее.

Будет ли это

1.) Сборщик мусора сделает это автоматически в Java?

2.) Нам нужно явно выполнить удаление указателя в методе финализации обернутого класса JNI?

3. ) Или мы должны просто забыть finalize (поскольку финализаторам нельзя доверять), и Java несет ответственность за вызов кода C ++, который удаляет объект

4.) Или есть способ освободить память непосредственно в самой Java (не уверены, как Java представляет указатель C ++ для его удаления)?

Как лучше всего это сделать и наоборот (когда мы передаем объекты из Java в C ++)?

10
задан seahorse 19 January 2012 в 13:21
поделиться