Difference between revisions of "Garbage Collection"

From Suhrid.net Wiki
Jump to navigationJump to search
Line 11: Line 11:
 
** Local variables in a method will be eligible for GC when the method returns.
 
** Local variables in a method will be eligible for GC when the method returns.
 
* Isolating a reference - Even if objects have valid references, but still there is no way to reach them, they will be GC'ed.
 
* Isolating a reference - Even if objects have valid references, but still there is no way to reach them, they will be GC'ed.
 +
 +
== Invoking GC ==
 +
 +
* Just a request, no guarantee that GC will happen.
 +
* Runtime.getRuntime().gc() or System.gc() as a convenience method.
 +
 +
== Finalize Method ==
 +
 +
* Any code that needs to be run before the object is GC'ed can be included in the finalize() method.
 +
* The finalize() method is defined in Object. (public void finalize())
 +
* For any object, finalize() will called '''ONLY ONCE''' by the GC. (An object can be gc'ed only once!)
 +
* Sometimes calling finalize() can cause the object not to be GC'ed if a reference to the current object is assigned somewhere else.
 +
* The JVM remembers that finalize() already ran and will not run it again.

Revision as of 04:57, 15 August 2011

Introduction

  • All GC involves in making sure the heap doesnt run out of space.
  • Purpose of the GC is to find and delete objects that cannot be reached.
  • An object is eligible to be garbage collected when no live thread can access it.

Ways in which Objects can be GC'ed

  • Nulling a reference - Explicitly assigning a reference to null will make it eligible for GC.
  • Reassigning a reference - Reassigning the reference to another object will cause older object to be eligible for GC.
    • Local variables in a method will be eligible for GC when the method returns.
  • Isolating a reference - Even if objects have valid references, but still there is no way to reach them, they will be GC'ed.

Invoking GC

  • Just a request, no guarantee that GC will happen.
  • Runtime.getRuntime().gc() or System.gc() as a convenience method.

Finalize Method

  • Any code that needs to be run before the object is GC'ed can be included in the finalize() method.
  • The finalize() method is defined in Object. (public void finalize())
  • For any object, finalize() will called ONLY ONCE by the GC. (An object can be gc'ed only once!)
  • Sometimes calling finalize() can cause the object not to be GC'ed if a reference to the current object is assigned somewhere else.
  • The JVM remembers that finalize() already ran and will not run it again.