package du.zhen.proptype.T3;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Test5 {
@Override
protected void finalize() throws Throwable {
System.out.println(this.hashCode()+"即将被回收..");
}
@Override
public String toString() {
return this.hashCode()+"";
}
public static void main(String[] args) throws InterruptedException {
//WeakReference a = new WeakReference(new Date());
ReferenceQueue queue = new ReferenceQueue();
Thread t1 = new Thread(()->{
try {
System.out.println("监听开始。。。");
while (true){
Reference remove = queue.remove();
if (remove!=null)
System.out.println(remove.get()+"==========队列========"+remove.hashCode());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t1.start();
// 软引用 垃圾回收时被加入队列中
SoftReference a1 = new SoftReference(new Test5(), queue);
SoftReference a2 = new SoftReference(new Test5(), queue);
SoftReference a3 = new SoftReference(new Test5(), queue);
SoftReference a4 = new SoftReference(new Test5(), queue);
SoftReference a5 = new SoftReference(new Test5(), queue);
// 制造内存溢出 OOM
List list = new ArrayList();
try {
while (true){
list.add(new Date());
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
package du.zhen.proptype.T3;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Test5 {
@Override
protected void finalize() throws Throwable {
System.out.println(this.hashCode()+"即将被回收..");
}
@Override
public String toString() {
return this.hashCode()+"";
}
public static void main(String[] args) throws InterruptedException {
//WeakReference a = new WeakReference(new Date());
ReferenceQueue queue = new ReferenceQueue();
Thread t1 = new Thread(()->{
try {
System.out.println("监听开始。。。");
while (true){
Reference remove = queue.remove();
if (remove!=null)
System.out.println(remove.get()+"==========队列========"+remove.hashCode());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
t1.start();
// 软引用 垃圾回收时被加入队列中
SoftReference a1 = new SoftReference(new Test5(), queue);
SoftReference a2 = new SoftReference(new Test5(), queue);
SoftReference a3 = new SoftReference(new Test5(), queue);
SoftReference a4 = new SoftReference(new Test5(), queue);
SoftReference a5 = new SoftReference(new Test5(), queue);
// 制造内存溢出 OOM
List list = new ArrayList();
try {
while (true){
list.add(new Date());
}
} catch (Throwable e) {
e.printStackTrace();
}
//相较于前一段程序 只添加了这里的输出语句
System.out.println("验证 "+a1.get()+" "+a1.hashCode());
System.out.println("验证 "+a2.get()+" "+a2.hashCode());
System.out.println("验证 "+a3.get()+" "+a3.hashCode());
System.out.println("验证 "+a4.get()+" "+a4.hashCode());
System.out.println("验证 "+a5.get()+" "+a5.hashCode());
}
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。