PhantomExample.java

import java.lang.ref.*;
import java.util.*;
public class PhantomExample {
  public static void main(String[] args) { 
    Mystere m = new Mystere();
    ArrayList al = new ArrayList();
    ReferenceQueue rq = new ReferenceQueue();
    for (int i=0; i<10; ++i) {
      MonInteger io = new MonInteger(i);
      al.add(new PhantomReference(io,rq));
      m.mystere(io);
    }
    int compteur = 0;
    while (true) {
      Reference r;
      if ((r=rq.poll())!=null) { // Attente non bloquante
    r.clear();               // Effacement de la référence fantôme:
        ++compteur;              // l'espace correspondant est libérable
        System.out.println("Parmi les 10 objets créés, " + compteur 
               + " ont été finalisés.");
      }
      System.gc();
    }
  }
}