Finalize()

Sei que nao é aconselhavel usá-lo.

Mas a pergunta é,

se o objeto é marcado para se coletado, quando o Garbage Collector for chamado (quando ele estiver disposta a isso), SEMPRE ele irá chamar o finalize() do objeto? (levando em conta que ele foi sobreescrito).

Na especificacao eu entendi que sim.

[]'s

segundo a especificação da jvm é exatamente isso.

http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#19147

Dê uma lida nessa thread do JR:
http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=33&t=025111

o metodo finalize() é executado uma unica vez para um unico objeto!!

Não.

Ele não é SEMPRE executado. Ele executará somente da primeira vez.
Se no seu metodo finalize o seu codigo de alguma forma impedir que o objeto seja seja coletado. Na proxima vez que o GC tentar coletar seu objeto ele não vai executar o finalize.

Ops.[EDITADO]