private boolean evict(){
  while (isOverflow()) {
    Node<K,V> node=sentinel.getNext();
    if (node == sentinel) {
      return false;
    }
 else     if (policy.onEvict(this,node)) {
      if (data.remove(node.getKey(),new Identity(node))) {
        length.decrementAndGet();
        node.remove();
        listener.onEviction(node.getKey(),node.getValue());
        return true;
      }
    }
  }
  return false;
}

private boolean evict ( ) { while ( isOverflow ( ) ) { Node < K , V > node = sentinel . getNext ( ) ; if ( node == sentinel ) { return false ; } else if ( policy . onEvict ( this , node ) ) { if ( data . remove ( node . getKey ( ) , new Identity ( node ) ) ) { length . decrementAndGet ( ) ; node . remove ( ) ; listener . onEviction ( node . getKey ( ) , node . getValue ( ) ) ; return true ; } } } return false ; }
evicts a single entry if the map exceeds the maximum capacity .
