Skip to content

Instantly share code, notes, and snippets.

@renzihui
Created March 1, 2019 02:54
Show Gist options
  • Select an option

  • Save renzihui/bd4de0b4131203e2b159047e4ce79d23 to your computer and use it in GitHub Desktop.

Select an option

Save renzihui/bd4de0b4131203e2b159047e4ce79d23 to your computer and use it in GitHub Desktop.
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.util.ArrayList;
import java.util.List;
public final class PhantomReferenceSample {
public static void main(String[] args) {
List<Object> objects = new ArrayList<>();
ReferenceQueue<Object> queue = new ReferenceQueue<>();
List<DataReference> dataReferences = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Object data = "junk" + i;
objects.add(data);
DataReference pr = new DataReference(i, data, queue);
dataReferences.add(pr);
}
objects.clear();
System.gc();
while (true) {
try {
Reference remove = queue.remove(1000l);
if(remove != null){
DataReference df = (DataReference) remove;
System.out.println("clean " + df.getIndex());
} else {
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
class DataReference extends PhantomReference<Object> {
private int index;
public DataReference(int index, Object referent, ReferenceQueue<Object> q) {
super(referent, q);
this.index = index;
}
public int getIndex() {
return index;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment