Вы не можете сделать это на Java. Все ответы, в которых упоминаются финализаторы, на самом деле не соответствуют вашим ожиданиям.
Лучшее, что вы можете сделать, это поставить PhantomReference в ReferenceQueue и опросить , пока не получите ссылку.
final ReferenceQueue rq = new ReferenceQueue();
final PhantomReference phantom = new PhantomReference( referenceToObjectYouWantToTrack, rq );
Вы хотите прочитать ответ Питера Кофлера здесь (он объясняет, что такое PhantomReference):
Вы когда-нибудь использовали ссылку фантома в каком-либо проекте?
Очень интересно почитайте здесь:
http://www.kdgregory.com/index.php?page=java.refobj
По сути, я использую PhantomReference в проекте, в котором кэш особого вида необходимо вычислять один раз при установке программного обеспечения. Для эффективного вычисления этого (дискового) кэша требуется гигантский объем памяти (чем больше, тем лучше). Я использую PhantomReference, чтобы отслеживать «почти точно», когда высвобождается этот гигантский объем памяти.