Core Java - [Garbage Collection/Finalization]

♠ Posted by Unknown in at 23:18

Garbage Collection and Finalization


Since object are dynamically allocated by using the new operator, you might be wondering how such objects are destroyed and their memory released for later reallocation. In some languages, such as C++ dynamically allocated objects must be manually released by use of a delete operator. Java takes a different approach; it handles reallocation for you automatically. The technique that accomplishes this is called garbage collection. It works like this: when no reference to an object exist, that object is assumed to be no loner needed, and the memory occupied by the object can be reclaimed. There is no explicit need to destroy objects as in C++. Garbage collection only occurs sporadically (if at all) during the execution of your program. It will not occur simply because one or more objects exist that are no longer used.  Furthermore, different Java run-time implementations will take varying approaches to garbage collection, but for the most part, you should not have to think about it while writing your programs.

Finalization:

Sometimes an object will need to perform some action when it is destroyed. For example, if an object is holding some non-Java resources such as a file handle or window character font, then you might want to make sure these resources are freed before an object is destroyed. To handle, such situations, Java provides a mechanism called finalization. By using, finalization, you can specific actions that will occur when an object is just about to be reclaimed by the garbage collector.

To add a finalized to a class, you simply define the finalize() method. The Java run time calls that method whenever it is about to recycle an object of that class. Inside the finalize() method you will specify those actions that must be performed before an object is destroyed. The garbage collector runs periodically, checking for objects that are no longer referenced by any running state or indirectly through other referenced objects. Right before an asset is freed, the Java runtime calls the finalize() method on the object.

The finalize() method has this general form:

                                                protected void finalize()
                                                {          
                                                            //finalization code here
                                                }

Here the keyword protected is a specifier that prevents access to finalize() by code defined outside its class.

It is important to understand that finalize()is only called just prior to garbage collection. It is not called when an object goes out-of-scope for example. This means that you cannot know when-or even if-finalize() will be executed. Therefore, your program should provide other means of releasing system resources, etc., used by the object. It must not rely on finalize() for normal program operation.


0 comments:

Post a Comment