Re: finalize() not called.
On 04.12.2014 17:56, somenathpal@gmail.com wrote:
Now when System.gc() is called I expect finalize() to be called. But it does not get called. But when I uncomment the following
System.out.println("Calling GC"); the finalize() gets called. I am not able to understand this behavior. I was expecting finalize() method yo be called.
Could you please explain the behavior.
That method is only ever invoked *if* "garbage collection determines
that there are no more references to the object".
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize()
First of all invoking System.gc() is not a guarantee that GC is actually
done.
http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#gc()
Second, even if GC is running there are no guarantees that all objects
are collected that may be collected.
If you need to do cleanup at a particular point then the usual pattern
in Java involves a try finally block. More recent versions of Java
provide additional means:
http://www.theserverside.com/tutorial/OCPJP-Exam-Objective-How-to-Use-Try-With-Resources-to-Clean-Up-Closeable-Resources
Kind regards
robert