Честно говоря, ваша жизнь станет намного лучше, если вы забудете о существовании финализаторов. Я программировал Java годами, и у меня никогда не было причин использовать финализатор.
Они медленные, плохо определены (иногда они никогда не бегут!) И, как правило, PITA.
Вместо этого сделайте что-нибудь в духе интерфейса Closeable, если вы управляете внешними ресурсами, и для очистки используйте блоки try {} finally {}. В противном случае, старайтесь изо всех сил доверять языку, чтобы очистить память после себя.