Я использую библиотеки LWJGL, и, к сожалению, мне нужно освобождать буферы текстур /vbo, когда node в моем графике сцены должен умереть, я даже не могу использовать метод finalize() для этого, поскольку я не может гарантировать, что он будет выполнен в том же потоке, который ожидают ему opengl libs.
Итак, я использую PhantomReferences. В моих узлах графика сцены я поместил это в конструктор:
phantomReference = new ScenePhantomReference(this, Game.phantomReferenceQueue);
Game.phantomReferenceList.add(phantomReference);
Как вы можете видеть во второй строке, я добавил phantomReference в список в основном классе. Моя логика заключается в том, что когда node становится разыменованным, phantomReference не будет собирать мусор с ним, поскольку в основном классе есть ссылка.
Добавляет ли он список, который вам нужен? Или он будет спасен от GC (возможно, Game.phantomReferenceQueue сохраняет ссылку на него?).
Это одна из проблем для проверки, я мог просто удалить список, но GC мог просто обработать объект, который просматривается перед phantomReference, и сделать его похожим на список избыточным, когда это действительно не так. Я был бы параноидальным, что любая другая реализация или версия VM может решить сделать это наоборот.