Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4519036

Threads that were not started are never garbage collected

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P2 P2
    • None
    • 1.4.0
    • other-libs
    • 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)
      ======================================================================

            Unassigned Unassigned
            nthompsosunw Nathanael Thompson (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: