code: @Override
    protected void removeFromReplacementList(Entry e) {
      if (e.isHot()) {
        hotHits += e.hitCnt;
        handHot = Entry.removeFromCyclicList(handHot, e);
        hotSize--;
      } else {
        coldHits += e.hitCnt;
        handCold = Entry.removeFromCyclicList(handCold, e);
        coldSize--;
      }
    }
docs: Remove, expire or eviction of an entry happens. Remove the entry from the
  replacement list data structure.
  
  <p>Why don't generate ghosts here? If the entry is removed because of
  a programmatic remove or expiry we should not occupy any resources.
  Removing and expiry may also take place when no eviction is needed at all,
  which happens when the cache size did not hit the maximum yet. Producing ghosts
  would add additional overhead, when it is not needed.