Removing all references to an object (setting those variables to null) will make that object eligible, but there's no guarantee it will be collected while the program is running.
You can't force or guarantee garbage collection. (Note that calling System.gc() only "suggests that the Java Virtual Machine expend effort toward recycling unused objects.")
"We're kind of on the level of crossword puzzle writers... And no one ever goes to them and gives them an award." ~Joe Strummer sscce.org
sujith Acharya
Ranch Hand
Joined: Dec 25, 2006
Posts: 60
posted
0
when you say conn=null, then its an indication to JVM is that, the object which conn is pointing is eligible for garbage collection(provided there no other reference to that object)
Objects are garbage collected when no live thread can access then. One way of achieving that is by nulling all the references to that object.
But that doesn't work always:
There are still references to the Test objects however no live thread can access them. The JVM recognizes these Islands of Objects and GC'd them.
Run:
wouter@wouter-laptop:~/temp$ javac Test.java
wouter@wouter-laptop:~/temp$ java -verbose:gc Test
Start
[GC 232K->120K(32256K), 0.0009260 secs]
[Full GC 120K->103K(32256K), 0.0037630 secs]
End
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." --- Martin Fowler
Please correct my English.
Siva Masilamani
Ranch Hand
Joined: Sep 19, 2008
Posts: 377
posted
0
By making reference to null, you are telling JVM that i do not need this object anymore and you may garbage collect it at your own convenient time unless the no more reference is given to this object else where(this includes finalized method).