某氏向けのちょっとした実験

class A {
	private int i;

	public A(int i) {
		this.i = i;
	}

	protected void finalize() {
		System.out.println("finalize![" + this.i + "]");
	}

	public static void main(String[] args) {
		new A(0);
		System.gc();
		System.out.println("GC!");
		new A(1);
	}
}
finalize![0]
GC!

要するにSystem.exit(int)すると、GCが省略されるのでfinalize()が呼ばれないのではないかと。
いや、仕様書読んでないから予測でしかないわけですが。