Új hozzászólás Aktív témák

  • Mr K
    őstag

    A finalize általában nem fog működni:
    public class T {
      static void p(String msg) { System.out.print(msg); }
      public static void main(String[] args) {
      p("started"); T t = new T(); t = null; p(" finished");
      }
      private T() { p(" constructed"); }
      @Override protected void finalize() { p(" finalized"); }
    }

    (Kimenet: started constructed finished)

    Ha a teszt JVM-emen beszúrok egy GC-t, akkor javul a helyzet:
        p("started"); T t = new T(); t = null; System.gc(); p(" finished");
    (Kimenet: started constructed finished finalized)

    De azon túl, hogy egy normális programot nyilván nem lehet telehinteni GC hívásokkal, az egész viselkedés még a garbage collector implementációjától is függ, szóval a finalize egyáltalán nem megoldás a problémára.

Új hozzászólás Aktív témák