/** Converts a reference to a value. */ V dereferenceValue(Object o) { if (o == null) { return null; } Object value = dereference(valueReferenceType, o); if (o instanceof InternalReference) { InternalReference reference = (InternalReference) o; if (value == null) { reference.finalizeReferent(); // old value was garbage collected } } return (V) value; }
void cleanUp(Reference reference) { try { ((InternalReference) reference).finalizeReferent(); } catch (Throwable t) { throw new IllegalStateException("Unable to clean up after reference", t); } }