Keyed Weak Reference
class KeyedWeakReference(referent: Any, val key: String, val description: String, val watchUptimeMillis: Long, referenceQueue: ReferenceQueue<Any>) : WeakReference<Any>
A weak reference used by ReferenceQueueRetainedObjectTracker to determine which objects become weakly reachable and which don't. ReferenceQueueRetainedObjectTracker uses key to keep track of KeyedWeakReference instances that haven't made it into the associated ReferenceQueue yet.
heapDumpUptimeMillis should be set with the current time from UptimeClock.uptime right before dumping the heap, so that we can later determine how long an object was retained.