Если вы выполняете код, который выполняет вызовы в нативную библиотеку на Java, каков обычный способ освобождения памяти, выделенной этими библиотеками, когда выделение памяти должно продолжаться в течение всего срока службы объекта? В C ++ я бы использовал деструкторы, но в Java их никогда не было, а у теперь их еще меньше .
Особый случай, который меня больше всего интересует, это JOCL , где у меня есть объект, который оборачивает скомпилированное ядро OpenCL и все его аргументы, которые всегда одинаковы. Структуры, представляющие скомпилированное ядро и аргументы, все размещаются на стороне библиотеки, и JOCL предоставляет метод clReleaseMemObject
, который вы вызываете для уменьшения счетчика ссылок, указывающего, когда объект должен быть удален (обратите внимание, что это немного отличается от прямого освобождения памяти, но в этом случае я не думаю, что это так).
Я предполагаю, что если объект все еще присутствует, когда программа завершается, все очищается ОС, но я не очень уверен насчет объектов, созданных в потоке. Итак:
Если вы хотите, чтобы собственная память была освобождена при сборке мусора, есть ли подходящее место для вызова метода, который освобождает эту память?
Если объект является таким, который будет работать в течение всего потока, есть ли подходящее место для этого вызова, или это вообще необходимо?