public synchronized void clean() {

    final Iterator<Map.Entry<K, WeakReferenceListManager<V>>> iterator =
        mData.entrySet().iterator();

    while (iterator.hasNext()) {

      final Map.Entry<K, WeakReferenceListManager<V>> entry = iterator.next();

      final WeakReferenceListManager<V> list = entry.getValue();
      list.clean();

      if (list.isEmpty()) {
        iterator.remove();
      }
    }
  }