dcsimg
Login | Register   
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


Tip of the Day
Language: Java Language
Expertise: Beginner
May 6, 1997

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


What happens to dangling pointers in java?

Question:
What happens to dangling pointers in Java? Supposedly there is garbage collection, but when is it performed? From what I have read, it seems really easy to have persistent dangling pointers (pointers to objects that no one is using that aren't being cleaned up by garbage collection).

Let's say I have a collection of objects, and one of the functions that manipulates the collection is called removeObject(int i), which removes the ith object from the collection and returns a pointer to the removed object.

Sometimes I need to get the removed object to salvage it for reuse; other times I simply want to remove the object. Is the returned pointer left dangling if I don't assign it when I make the function call? Should it be left to the function-caller to dispose of unused objects, or should the programmer make two functions, deleteObject() and removeObject()?

Answer:
By definition, a dangling reference is an active binding between a name and a de-allocated segment of the heap. By definition, garbage is a segment of the heap that is no longer bound to a name by an active binding. Only garbage is de-allocated by the garbage collector; hence, a dangling reference is not possible. This, and no memory leaks, are the principle advantages of garbage collection.

If I understand your example, you are asking what the difference is between

removeObject(i);
and
x = removeObject(i);
Assuming there are no other active references to the i-th object of the collection, this object becomes garbage after the first call. A pointer to the object was returned, but was not bound to a name, hence there is no dangling reference.

By contrast, the returned pointer was bound to x in the second call, so it can still be accessed through the name x, and is not garbage.

DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap
Thanks for your registration, follow us on our social networks to keep up-to-date