I\'m using the LWJGL libraries and unfortunately I need to free up texture/vbo buffers myself whenever a node in my scene graph needs to die, I can\'t even use finalize() method
PhantomReference object is added to the queue when the referenced object id GC'd, not the PhantomReference itself.
If you don't add a PhantomReference to a List, there is no reference to PhantomReference object, and thus it is GC'd immediately and never makes into the queue.
Disclaimer: I have not ever used PhantomReference.
However, I did read this article and this javadoc page, and so
Edit: Read the title of your post again. To answer the title question by itself: No, because a PhantomReference enters the ReferenceQueue after it has been gc'ed - so by definition it cannot be stopped from being gc'ed. To quote the first link: "The only use for such a reference [note: he means PhantomReference] is keeping track of when it gets enqueued into a ReferenceQueue, as at that point you know the object to which it pointed is dead"
Edit #2: I also think your code is wrong in that you should be initialising the phantom reference as follows (see a simple example here):
PhantomReference scenePhantomRef = new PhantomReference(scene, phantomQueue);
where scene is the ScenePhantomReference from your code (i.e. you should refactor your code so that ScenePhantomReference is name e.g. Scene, you instantiate it as scene and then use the line above to get a handle on a PhantomReference for that object).