package com.sgcc.test;
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
public class test {
public static void main(String[] args) throws InterruptedException {
Object obj = new Object();
Object objr;
if(obj.equals(objr = new Object()))System.out.println(123);
obj = null;
Runtime.getRuntime().gc();
System.out.println(objr);
Object obj1 = new Object();
SoftReference<Object> sf = new SoftReference<Object>(obj1);
obj1 = null;
Runtime.getRuntime().gc();
System.out.println(sf.get());
Object obj2 = new Object();
WeakReference<Object> wf = new WeakReference<Object>(obj2);
obj2 = null;
Runtime.getRuntime().gc();
System.out.println(wf.get());
Object obj3 = new Object();
final ReferenceQueue q = new ReferenceQueue();
PhantomReference<Object> pf = new PhantomReference<Object>(obj3, q);
Thread t = new Thread(){
@Override
public void run() {
try {
Reference reference = q.remove();
System.out.println(reference + " event fired.");
} catch (InterruptedException e) {
e.printStackTrace();
}
super.run();
}
};
t.setDaemon(true);
t.start();
obj3=null;
System.gc();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("pf.get: "+pf.get() +" isEnqueued"+ pf.isEnqueued());
}
}
package com.sgcc.test;
public class FinalizeEscapeGC {
public String name;
public static FinalizeEscapeGC SAVE_HOOK = null;
public FinalizeEscapeGC(String name) {
this.name = name;
}
public void isAlive() {
System.out.println("yes, i am still alive :)");
}
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("finalize method executed!");
System.out.println(this);
FinalizeEscapeGC.SAVE_HOOK = this;
}
@Override
public String toString() {
return name;
}
public static void main(String[] args) throws InterruptedException {
SAVE_HOOK = new FinalizeEscapeGC("leesf");
System.out.println(SAVE_HOOK);
SAVE_HOOK = null;
System.out.println(SAVE_HOOK);
System.gc();
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead : (");
}
SAVE_HOOK = null;
System.gc();
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead : (");
}
}
}