shouldn't the "collection process" (which right now means null-ing out entries) be subject to same lock used for `addEntry` ? Not 100% sure, but can't it happen that `addEntry` is called concurrently while the GC runner is running, causing an entry to be overwritten ?