• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Garbage Collection Question

 
Richard Vagner
Ranch Hand
Posts: 108
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have a question on "isolation a Reference" discussed in kathy and Bert' book on Garbage Collection

The code example:



My question is

After i4.i = i2; i3, i4 and i2 are formed as Island Objects so they are already eligible for garbage collection, is that right? So why they have to be nulled to be garbage collected?
 
Vivek Bansal
Greenhorn
Posts: 1
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The nature of automatic garbage collection has an important consequence:
You can still get memory leaks. If you allow live, accessible references to
unneeded objects to persist in your programs, then those objects cannot be
garbage collected. Therefore, it may be a good idea to explicitly assign null into a variable when you have finished with it. This issue is particularly noticeable if you are implementing a collection of some kind.
 
Richard Vagner
Ranch Hand
Posts: 108
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks for your reply. Here I am refering to the idea of islands of isolation. So if Island objects are formed, they are elibible for garbage collection.

1. I understand assigning null is a good practice. But is there a difference as to assigning null to them and not assigning null to them?

2. If asked after which line of code, i3, i4 and i2 will be eligible for garbage collection, can I say after the line "i4.i = i2;"?
 
Mike Gershman
Ranch Hand
Posts: 1272
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The answer is that as long as the objects are accessable from your main() method using i2, i3, or i4, the objects cannot be garbage collected. If you can reach one object, you can reach them all because they form a ring of references.

So you must set i2, i3, and i4 all to null before any of the three objects can be garbage collected.
 
Barry Gaunt
Ranch Hand
Posts: 7729
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
'can I say after the line "i4.i = i2;"?'

No. If you can picture it, at this point you have a ring of three joined together kites each with a string attached to your hand. As Mike explained, you must let go of all those strings for the kites to be blown away. Even though they stay connected to each other.
 
Richard Vagner
Ranch Hand
Posts: 108
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks a lot! I am clear.
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic