import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.util.concurrent.TimeUnit;
class Ideone {
Beta b1 = new Beta();
Beta b2 = new Beta();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();
a1.b1 = b1;
a1.b2 = b1;
a2.b2 = b2;
PhantomReference<Alpha> a1Phantom =
new PhantomReference<>(a1, new ReferenceQueue<>());
PhantomReference<Alpha> a2Phantom =
new PhantomReference<>(a2, new ReferenceQueue<>());
PhantomReference<Beta> b1Phantom =
new PhantomReference<>(b1, new ReferenceQueue<>());
PhantomReference<Beta> b2Phantom =
new PhantomReference<>(b2, new ReferenceQueue<>());
a1 = null;
b1 = null;
b2 = null;
Thread.
sleep(TimeUnit.
SECONDS.
toMillis(1)); "a1 has %sbeen collected%n",
a1Phantom.isEnqueued() ? "" : "not ");
"a2 has %sbeen collected%n",
a2Phantom.isEnqueued() ? "" : "not ");
"b1 has %sbeen collected%n",
b1Phantom.isEnqueued() ? "" : "not ");
"b2 has %sbeen collected%n",
b2Phantom.isEnqueued() ? "" : "not ");
}
}
class Beta {
}
class Alpha {
static Beta b1;
Beta b2;
}
aW1wb3J0IGphdmEubGFuZy5yZWYuUGhhbnRvbVJlZmVyZW5jZTsKaW1wb3J0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWU7CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKCmNsYXNzIElkZW9uZSB7CiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgIEJldGEgYjEgPSBuZXcgQmV0YSgpOwogICAgQmV0YSBiMiA9IG5ldyBCZXRhKCk7CiAgICBBbHBoYSBhMSA9IG5ldyBBbHBoYSgpOwogICAgQWxwaGEgYTIgPSBuZXcgQWxwaGEoKTsKICAgIGExLmIxID0gYjE7CiAgICBhMS5iMiA9IGIxOwogICAgYTIuYjIgPSBiMjsKICAgIFBoYW50b21SZWZlcmVuY2U8QWxwaGE+IGExUGhhbnRvbSA9CiAgICAgICAgbmV3IFBoYW50b21SZWZlcmVuY2U8PihhMSwgbmV3IFJlZmVyZW5jZVF1ZXVlPD4oKSk7CiAgICBQaGFudG9tUmVmZXJlbmNlPEFscGhhPiBhMlBoYW50b20gPQogICAgICAgIG5ldyBQaGFudG9tUmVmZXJlbmNlPD4oYTIsIG5ldyBSZWZlcmVuY2VRdWV1ZTw+KCkpOwogICAgUGhhbnRvbVJlZmVyZW5jZTxCZXRhPiBiMVBoYW50b20gPQogICAgICAgIG5ldyBQaGFudG9tUmVmZXJlbmNlPD4oYjEsIG5ldyBSZWZlcmVuY2VRdWV1ZTw+KCkpOwogICAgUGhhbnRvbVJlZmVyZW5jZTxCZXRhPiBiMlBoYW50b20gPQogICAgICAgIG5ldyBQaGFudG9tUmVmZXJlbmNlPD4oYjIsIG5ldyBSZWZlcmVuY2VRdWV1ZTw+KCkpOwogICAgYTEgPSBudWxsOwogICAgYjEgPSBudWxsOwogICAgYjIgPSBudWxsOwogICAgU3lzdGVtLmdjKCk7CiAgICBUaHJlYWQuc2xlZXAoVGltZVVuaXQuU0VDT05EUy50b01pbGxpcygxKSk7CiAgICBTeXN0ZW0ub3V0LnByaW50ZigKICAgICAgICAiYTEgaGFzICVzYmVlbiBjb2xsZWN0ZWQlbiIsCiAgICAgICAgYTFQaGFudG9tLmlzRW5xdWV1ZWQoKSA/ICIiIDogIm5vdCAiKTsKICAgIFN5c3RlbS5vdXQucHJpbnRmKAogICAgICAgICJhMiBoYXMgJXNiZWVuIGNvbGxlY3RlZCVuIiwKICAgICAgICBhMlBoYW50b20uaXNFbnF1ZXVlZCgpID8gIiIgOiAibm90ICIpOwogICAgU3lzdGVtLm91dC5wcmludGYoCiAgICAgICAgImIxIGhhcyAlc2JlZW4gY29sbGVjdGVkJW4iLAogICAgICAgIGIxUGhhbnRvbS5pc0VucXVldWVkKCkgPyAiIiA6ICJub3QgIik7CiAgICBTeXN0ZW0ub3V0LnByaW50ZigKICAgICAgICAiYjIgaGFzICVzYmVlbiBjb2xsZWN0ZWQlbiIsCiAgICAgICAgYjJQaGFudG9tLmlzRW5xdWV1ZWQoKSA/ICIiIDogIm5vdCAiKTsKICB9Cn0KCmNsYXNzIEJldGEgewp9CgpjbGFzcyBBbHBoYSB7CiAgc3RhdGljIEJldGEgYjE7CiAgQmV0YSBiMjsKfQ==