ファイナライズの機能を理解するには、ガベージ コレクター (GC) ワークフローを理解する必要があります。.finalize() を呼び出してもガベージ コレクターは呼び出されず、system.gc も呼び出されません。実際、コーダーがファイナライズに役立つのは、オブジェクトの参照を「参照されていない」と宣言することです。
GC は JVM の実行中の操作を強制的に中断させ、パフォーマンスに影響を与えます。操作中、GC はルート オブジェクト (メイン メソッド呼び出し) から開始して、参照されているすべてのオブジェクトをトラバースします。この一時停止時間は、オブジェクトを参照されていないと手動で宣言することで短縮できます。これは、自動実行によってオブジェクト参照が廃止されたことを宣言する操作コストが削減されるためです。finalize() を宣言することにより、コーダーはオブジェクトへの参照を廃止するように設定します。したがって、GC 操作の次の実行時に、GC 実行は操作時間を使用せずにオブジェクトをスイープします。
引用: 「オブジェクトに対して finalize メソッドが呼び出された後、Java 仮想マシンが、まだ終了していないスレッドがこのオブジェクトにアクセスできる手段がなくなったと再び判断するまで、それ以上のアクションは実行されません。ファイナライズの準備ができている他のオブジェクトまたはクラスによって可能なアクションを含み、その時点でオブジェクトは破棄される可能性があります。」 from Java API Doc on java.Object.finalize();
詳細な説明については、javabook.computerwareも確認してください。