Skip to content

Latest commit

 

History

History
37 lines (26 loc) · 1.24 KB

290b.md

File metadata and controls

37 lines (26 loc) · 1.24 KB

Back to questions

Solution to 290b: Memory leaks in Java

See code at solutions/code/tutorialquestions/question290b

See standardreferences.Demo for a program that causes an "out of memory" error.

The Point class in the weakreferences package shows how Java's WeakReference and WeakHashMap classes can be used to avoid the memory leak problem. The pool map is changed so that it maps Point objects to WeakReference<Point> objects. Furthermore, point is instantiated to be a WeakHashMap rather than a HashMap.

In makePoint, the line:

pool.put(p, p);

is changed to:

pool.put(p, new WeakReference<Point>(p));

---the reference p specified as the value part of the map entry is wrapped in a WeakReference.

The result of this is that if a Point object is only active because it is a member of pool, it is allowed to be garbage-collected.

Class weakreferences.Demo demonstrates that this solution works by creating a vast number of distinct Point objects, but not keeping a reference to any of them. Because of the use of weak references in the implementation of object pooling, these objects will eventually be garbage-collected, so memory is not exhausted.