/**
* 引用队列demo
*/
private
static
void
refQueueDemo() {
ReferenceQueue<String> refQueue =
new
ReferenceQueue<>();
Thread checkRefQueueThread =
new
Thread(() -> {
while
(
true
) {
Reference<?
extends
String> clearRef = refQueue.poll();
if
(
null
!= clearRef) {
System.out
.println(
"引用对象被回收, ref = "
+ clearRef +
", value = "
+ clearRef.get());
}
}
});
checkRefQueueThread.start();
WeakReference<String> weakRef1 =
new
WeakReference<>(
new
String(
"value1"
), refQueue);
WeakReference<String> weakRef2 =
new
WeakReference<>(
new
String(
"value2"
), refQueue);
WeakReference<String> weakRef3 =
new
WeakReference<>(
new
String(
"value3"
), refQueue);
System.out.println(
"ref1 value = "
+ weakRef1.get() +
", ref2 value = "
+ weakRef2.get()
+
", ref3 value = "
+ weakRef3.get());
System.out.println(
"开始通知JVM的gc进行垃圾回收"
);
System.gc();
}