Automatically Removing an Unreferenced Element from a Hash Table

When a key is added to a map, the map will prevent the key from being garbage-collected. However, a weak map will automatically remove a key if the key is not being referenced by any other object. An example where this type of map might be useful is a registry where a registrant is automatically removed after it is garbage-collected.
// Create the weak map Map weakMap = new WeakHashMap(); // Add a key to the weak map weakMap.put(keyObject, valueObject); // Get all keys that are still being referenced Iterator it = weakMap.keySet().iterator(); while (it.hasNext()) { // Get key Object key = it.next(); }
The weak map does not automatically release the value if it is no longer used. To enable automatically release of the value, the value must be wrapped in a WeakReference object:
WeakReference weakValue = new WeakReference(valueObject); weakMap.put(keyObject, weakValue); // Get all keys that are still being referenced and check whether // or not the value has been garbage-collected it = weakMap.keySet().iterator(); while (it.hasNext()) { // Get key Object key = it.next(); weakValue = (WeakReference)weakMap.get(key); if (weakValue == null) { // Value has been garbage-collected } else { // Get value valueObject = weakValue.get(); } }

Post a comment

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.