1 import java.util.Vector;
2 import java.util.Enumeration;
5 public static final int N=20;
6 public static final int SLEEP=1000;
7 public static final int MOD_REMEMBERED =3;
8 public static final int MOD_RESURRECTED=4;
9 public static final int MOD_UGLY =10;
11 public static Vector<Final> resurrected;
12 public static Vector<Final> remembered;
16 protected void finalize() throws Throwable {
17 System.out.println("\tFinalized object #" + id);
19 if (id % MOD_RESURRECTED == 0) {
20 System.out.println("\tFinalizer #" + id + " resurrected object");
21 resurrected.add(this);
24 if (id % MOD_UGLY == 0) {
25 System.out.println("\tFinalizer #" + id + " does an ugly thing!");
32 public static void main(String args[]) {
33 Enumeration<Final> en;
36 resurrected = new Vector<Final>(N);
37 remembered = new Vector<Final>(N);
39 System.out.println("Creating objects ...");
40 for (int i=0; i<N; i++) {
44 if (i % MOD_REMEMBERED == 0) {
45 System.out.println("\tRemembering object #" + i);
52 System.out.println("Forcing collection 1 ...");
54 System.out.println("Forcing collection 2 ...");
56 System.out.println("Forcing collection 3 ...");
59 for (long i=0; i<400000000; i++);
62 } catch (Exception e) {
65 en = remembered.elements();
66 while (en.hasMoreElements()) {
68 System.out.println("Preserved object #" + f.id);
71 en = resurrected.elements();
72 while (en.hasMoreElements()) {
74 System.out.println("Resurrected object #" + f.id);
81 System.out.println("Forcing collection 4 ...");
83 System.out.println("Forcing collection 5 ...");
86 for (long i=0; i<400000000; i++);
89 } catch (Exception e) {
92 System.out.println("Shutting down ...");