public void run(){
    for(;;){
      try{
        Thread.sleep(1000*60*5);
      }catch(InterruptedException e){
        //no problem, really
      }
      synchronized(cache){
        for(Entry<String, SoftReference<U>> ent : cache.entrySet()){
          if(ent.getValue().get() == null){
            cache.remove(ent.getKey());
          }
        }
      }
    }
  }