When the garbage collector calls the finalize() method it will ignore any exceptions thrown by the finalize() method. In all other cases normal exception handling occurs when an exception is thrown during the execution of the finalize() method that is exceptions are not simply ignored. Calling the finalize() method does not in itself destroy the object.
There is no Guaranty execution of finalize() method because it will execute just before the garbage collected. But for every application Garbage collection will not be done. when it will be collected we dont know.
There is a finalizer thread which is a background thread and that has a runFinalizer method which skips all the exceptions thrown by invokeFinalizeMethod which internally calls the finalize method of Object to clean. That's why there is no impact on GC if finaliza throws the exception
If an uncaught exception is thrown during finalization the exception is ignored and finalization of that object terminates. This can leave the object in a corrupted state.