学习java中,请教为什么是这样的结果呢?
import java.lang.ref.*;
class VeryBig {
private static final int SZ = 10000;
private double[] d = new double[SZ];
private String ident;
public VeryBig(String id) {
ident = id;
}
public String toString() {
return ident;
}
public void finalize() {
System.out.println("Finalizing " + ident);
}
}
public class References {
private static ReferenceQueue rq = new ReferenceQueue();
public static void checkQueue(String ss) {
Object inq = rq.poll();
if (inq != null)
System.out.println("In " + ss + " queue: " + (VeryBig) ((Reference) inq).get());
}
public static void main(String[] args) {
int size = 10;
if (args.length > 0) {
size = Integer.parseInt(args[0]);
}
System.out.println("Soft-------");
SoftReference[] sa = new SoftReference[size];
for (int i = 0; i < sa.length; i++) {
sa[i] = new SoftReference(new VeryBig("Soft" + i), rq);
System.out.println("Just Soft Createed: " + (VeryBig) sa[i].get());
checkQueue("Soft");
}
System.out.println("Weak-------");
WeakReference[] wa = new WeakReference[size];
for (int i = 0; i < wa.length; i++) {
wa[i] = new WeakReference(new VeryBig("Weak" + i), rq);
System.out.println("Just Weak Createed: " + (VeryBig) wa[i].get());
checkQueue("Weak");
}
System.out.println("Phantom-------");
PhantomReference[] pa = new PhantomReference[size];
for (int i = 0; i < pa.length; i++) {
pa[i] = new PhantomReference(new VeryBig("Phantom" + i), rq);
System.out.println("Just Phantom Createed: " + (VeryBig) pa[i].get());
checkQueue("Phantom");
}
SoftReference s = new SoftReference(new VeryBig("Soft"));
WeakReference w = new WeakReference(new VeryBig("Weak"));
System.out.println("Cabage Collection");
System.gc();
}
}
C:\>java References 5
Soft-------
Just Soft Createed: Soft0
Just Soft Createed: Soft1
Just Soft Createed: Soft2
Just Soft Createed: Soft3
Just Soft Createed: Soft4
Weak-------
Just Weak Createed: Weak0
Just Weak Createed: Weak1
Just Weak Createed: Weak2
Just Weak Createed: Weak3
Just Weak Createed: Weak4
Phantom-------
Finalizing Weak0
Finalizing Weak1
Finalizing Weak2
Finalizing Weak3
Finalizing Weak4
Just Phantom Createed: null
In Phantom queue: null
Just Phantom Createed: null
In Phantom queue: null
Just Phantom Createed: null
In Phantom queue: null
Just Phantom Createed: null
In Phantom queue: null
Just Phantom Createed: null
In Phantom queue: null
Finalizing Phantom3
Finalizing Phantom2
Finalizing Phantom4
Finalizing Phantom1
Finalizing Phantom0
Cabage Collection
Finalizing Weak