-
Bug
-
Resolution: Duplicate
-
P2
-
None
-
1.4.0
-
x86
-
windows_2000
Name: nt126004 Date: 10/24/2001
java version "1.4.0-beta2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta2-b77)
Java HotSpot(TM) Client VM (build 1.4.0-beta2-b77, mixed mode)
The following Memory.java ends up with an OutOfMemory error. This is very unpleasant concerning that javax.swing.SwingUtilities.invokeLater() executes run() method of a thread which means that recommended use of it leads to memory leaks. By making MemorySpace not a subclass of Thread, there is no OutOfMemoryError.
import java.util.*;
import java.lang.ref.*;
public class Memory {
public static void main(String argv[]) {
GarbageListener gl = new GarbageListener();
while (true) {
gl.register(new MemorySpace());
}
}
}
class MemorySpace extends Thread {
int [] some = new int[10000];
public void run() {
}
}
class GarbageListener {
Map types = new HashMap();
ReferenceQueue queue = new ReferenceQueue();
Thread printer = null;
public void register(Object o) {
if (null == printer) {
printer = new Thread() {
public void run() {
while (true) {
try {
Reference r = queue.remove();
System.err.println(types.get(r));
}
catch(InterruptedException ie) {
}
}
}
};
printer.start();
}
types.put(new WeakReference(o, queue), o.getClass().getName());
}
}
(Review ID: 134378)
======================================================================
- duplicates
-
JDK-4508232 (thread) Unborn Threads are not garbage collected
-
- Closed
-