Garbage Collection: ND ND
Garbage Collection: ND ND
nd
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
90 91 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
Garbage Collection
1. Introduction:
2. The way to make an object eligible for GC
i. Nullifying the reference variable
ii. Reassign the reference variable
iii. Objects created inside a method
iv. Island of Isolation
3. The methods for requesting JVM to run GC
i. By System class
ii. By Runtime class
4. Finalization
o Case 1 : Just before destroying any object GC calls finalize() method on
the object
o Case 2 : We can call finalize() method explicitly
o Case 3 : finalize() method can be call either by the programmer or by the
GC
o Case 4 : On any object GC calls finalize() method only once
Memory leaks
Introduction:
In old languages like C++ programmer is responsible for both creation and
destruction of objects. Usually programmer is taking very much care while
creating object and neglect destruction of useless objects .Due to his negligence at
certain point of time for creation of new object sufficient memory may not be
available and entire application may be crashed due to memory problems.
But in java programmer is responsible only for creation of new object and his
not responsible for destruction of objects.
Sun people provided one assistant which is always running in the background for
destruction at useless objects. Due to this assistant the chance of failing java
program is very rare because of memory problems.
This assistant is nothing but garbage collector. Hence the main objective of GC is
to destroy useless objects.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
92 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
93
r Garbage Collection r Garbage Collection
The following are various possible ways to make an object eligible for GC:
If an object is no longer required then we can make eligible for GC by assigning "null"
to all its reference variables.
Example:
If an object is no longer required then reassign all its reference variables to some other
objects then old object is by default eligible for GC.
Example:
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
94 95
Example 3:
Example 2:
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
96 97
r Garbage Collection r Garbage Collection
Example 4:
4.Island of Isolation:
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
98 99
The following are various ways for requesting jvm to run GC:
By System class:
By Runtime class:
Example:
Runtime r=Runtime.getRuntime();
Once we got Runtime object we can call the following methods on that object.
Example:
import java.util.Date;
class RuntimeDemo
{
public static void main(String args[]){
Runtime r=Runtime.getRuntime();
Note: if an object doesn't have any reference then it always eligible for GC. System.out.println("total memory of the heap :"+r.totalMemory());
Note: Even though object having reference still it is eligible for GC some times. System.out.println("free memory of the heap :"+r.freeMemory());
for(int i=0;i<10000;i++)
{
Example: Date d=new Date();
d=null;
island of isolation. (Island of Isolation all references are internal references ) }
System.out.println("free memory of the heap :"+r.freeMemory());
r.gc();
The methods for requesting JVM to run GC: System.out.println("free memory of the heap :"+r.freeMemory());
}
}
Output:
Total memory of the heap: 5177344
nd
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
100 101 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
r Garbage Collection r Garbage Collection
If we replace String object with Test object then Test class finalize() method will be
executed .
Finalization: Example:
class Test
{
Just before destroying any object gc always calls finalize() method to perform public static void main(String args[]){
cleanup activities. String s=new String("bhaskar");
If the corresponding class contains finalize() method then it will be executed Test t=new Test();
otherwise Object class finalize() method will be executed. t=null;
System.gc();
System.out.println("End of main.");
which is declared as follows.
protected void finalize() throws Throwable }
public void finalize(){
Case 1: System.out.println("finalize() method is executed");
}
}
Just before destroying any object GC calls finalize() method on the object which is Output:
eligible for GC then the corresponding class finalize() method will be executed. finalize() method is executed
End of main
For Example if String object is eligible for GC then String class finalize()method is
executed but not Test class finalize()method. Case 2:
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
102 103
We can call finalize() method explicitly then it will be executed just like a normal
method call and object won't be destroyed. But before destroying any object GC always
calls finalize() method.
Example:
class Test
{
public static void main(String args[]){
Test t=new Test(); Diagram:
t.finalize();
t.finalize();
t=null;
System.gc();
System.out.println("End of main.");
}
public void finalize(){
System.out.println("finalize() method called");
}
}
Output:
finalize() method called.
finalize() method called.
finalize() method called.
End of main.
In the above program finalize() method got executed 3 times in that 2 times explicitly by
the programmer and one time by the gc.
Note: In Servlets we can call destroy() method explicitly from init() and service()
methods. Then it will be executed just like a normal method call and Servlet object
won't be destroyed.
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
104 105
r Garbage Collection r Garbage Collection
Case 3: System.gc();
Thread.sleep(5000);
System.out.println("end of main method");
finalize() method can be call either by the programmer or by the GC . }
public void finalize()
If the programmer calls explicitly finalize() method and while executing the finalize() {
method if an exception raised and uncaught then the program will be terminated System.out.println("finalize method called");
s=this;
abnormally. }
If GC calls finalize() method and while executing the finalize()method if an exception }
raised and uncaught then JVM simply ignores that exception and the program will be Output:
terminated normally. D:\Enum>java FinalizeDemo
4072869
finalize method called
Example: 4072869
class Test End of main method
{
public static void main(String args[]){
Test t=new Test();
//t.finalize();-------line(1) Note:
t=null; The behavior of the GC is vendor dependent and varied from JVM to JVM hence we
System.gc(); can't expert exact answer for the following.
System.out.println("End of main.");
}
public void finalize(){
System.out.println("finalize() method called");
System.out.println(10/0);
}
If we are not comment line1 then programmer calling finalize() method explicitly and
while executing the finalize()method ArithmeticException raised which is uncaught
hence the program terminated abnormally.
If we are comment line1 then GC calls finalize() method and JVM ignores
ArithmeticException and program will be terminated normally.
nd
DURGASOFT, # 202,2 Floor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
106 040 – 64 51 27 86, 80 96 96 96 96, 9246212143 | www.durgasoft.com
107
Memory leaks:
An object which is not using in our application and it is not eligible for GC such
type of objects are called "memory leaks".
In the case of memory leaks GC also can't do anything the application will be
crashed due to memory problems.
In our program if memory leaks present then certain point we will get
OutOfMemoryException. Hence if an object is no longer required then it's
highly recommended to make that object eligible for GC.
By using monitoring tools we can identify memory leaks.
Example:
HPJ meter
HP ovo
IBM Tivoli These are monitoring tools.
J Probe (or memory management tools)
Patrol and etc
DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038, DURGASOFT, # 202,2ndFloor,HUDA Maitrivanam,Ameerpet, Hyderabad - 500038,
108 109