Realmente no se puede hacer en Java. Todas las respuestas que mencionan los finalizadores no son realmente lo que buscas.
Lo mejor que puede hacer es poner en cola una Referencia Phantom en una consulta de Referencia y encuesta hasta que obtenga la referencia.
final ReferenceQueue rq = new ReferenceQueue();
final PhantomReference phantom = new PhantomReference(referenceToObjectYouWantToTrack, rq);
¿Quieres leer la respuesta de Pedro Kofler aquí (se explica lo que es un PhantomReference es):
Have you ever used Phantom reference in any project?
muy interesante leer aquí:
http://www.kdgregory.com/index.php?page=java.refobj
Básicamente, estoy usando una referencia fantasma en un proyecto donde un tipo de caché muy especial necesita ser computado una vez, cuando el el software está instalado. Para calcular de manera eficiente esta memoria caché (basada en disco), se necesita una gran cantidad de memoria (cuanto más, mejor). Estoy usando PhantomReference para rastrear "casi exactamente" cuando se libera esa cantidad gigantesca de memoria.
(FWIW, por lo general es un oyente) –
Pensé que podría ser, pero traté de eliminar todos los ActionListeners y componentListeners – Shizam