• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Dans GC

 
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Which of the three objects, A, B, C, are eligible for garbage collection when method m2 begins to execute?
a. A
b. B
c. C
d. None.
e. Compiler error.
f. Run time error.
g. None of the above.
Answer is a and b. Can anyone explain how?
Thanks
 
Ranch Hand
Posts: 3271
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Sunita,
This question has been discussed a number of times in this forum (once just recently, as well, I believe). Take a look at this thread.
Be sure you do a search through the forum. Sometimes, you'll find what you're after right away.
Corey
 
sun par
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Referred the thread.. Am still confused

i1,i2 and i3 are member variables of J. So when we call J() we have

Then we call private instance method m1().
We have i1.other(i2);
I would think that in method other, a new variable i is created which again points to
new I(a)??? What happens when inside other we say
other=i??

[ March 26, 2003: Message edited by: Corey McGlone ]
 
Corey McGlone
Ranch Hand
Posts: 3271
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Every I object has two members, a reference to a String which represents its name and a reference to another I object, named other.
When we initialize J, we create 3 new objects, like this:

In this case, the letter represents the name, the null represents the value of the member variable other for each I object.
Now, when we invoke the method m1, we start invoking the other method of our I objects. Executing this line of code:

causes the method I.other to be invoked. So, if we follow the execution to that method, we see this code:

This line simply assigns the value of i, which, in this case, is a reference to the object referenced by i2 (that's the I object named B), to the member variable other. So, now our picture has changed slightly - it now looks like this:

As you can see from the picture, the object named A now contains a reference to the object named B.
The next two invocations of the method m1 perform a similar function, just on different objects. Once they're done, our picture looks like this:

The objects named A and B have references to each other and object C contains a reference to itself.
Now that we're done invoking the m1 method, we can go on to the next lines of code, that do this:

These lines simply reassign i1 and i2 to reference the same object that i3 references. Again, our picture changes to look like this:

Now, you can see that i1, i2, and i3 all reference the same object and the only things that reference objects A and B are each other. As those objects can no longer be accessed via an active part of the application, they can be safely garbage collected. Object C, on the other hand, can still be accessed via the member variables i1, i2, or i3, so that object is not eligible for garbage collection.
I hope that helps,
Corey
 
sun par
Ranch Hand
Posts: 257
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks Corey for taking the pain to explain it clearly.
 
Corey McGlone
Ranch Hand
Posts: 3271
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by sun par:
Thanks Corey for taking the pain to explain it clearly.


It's really no problem. Quite often, people that have been around a while simply redirect you to other sources (such as was the case here) because we know that it's already been discussed and there is already a good deal of information there. It's not that we're trying to blow you off. If you take a look at what I show you and still have questions, I'd be happy to help you out - I'm sure almost everyone around here would do the same.
Corey
 
Slime does not pay. Always keep your tiny ad dry.
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic