Я где-то читал, что сборка мусора не похожа на уничтожение (в смысле C ++). чем они отличаются?
C ++ уничтожение детерминировано, сборка мусора — нет.
В C ++ вы можете гарантировать, когда будут вызываться деструкторы, в Java такой гарантии нет вообще. Фактически, ваши деструкторы никогда не могут быть вызваны на Java.