Usando timer e timerTask, está fazendo várias verificações, e com isso, o servidor está ficando cheio.
Como posso fazer para desalocar a memória preenchida?
private Timer timer;
private Date d;
private final SimpleDateFormat sdfHora;
private final SimpleDateFormat sdfData;
private long dataAtual;
private long dataComecaEnviar;
public AgendamentoClassificacao() {
    this.timer = null;
    this.d = new Date();
    this.sdfHora = new SimpleDateFormat("HHmm");
    this.sdfData = new SimpleDateFormat("yyyyMMdd");
    this.dataAtual = 0;
    this.dataComecaEnviar = 0;
}
@Override
 public void contextInitialized(ServletContextEvent arg0) {
    
    System.out.println("==== SOFTWARE INICIALIZADO ====");
    
    timer = new Timer ();
    
    Calendar c = Calendar.getInstance();
    
    c.set(Calendar.HOUR_OF_DAY, 20); 
    c.set(Calendar.MINUTE, 00);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    
    Date horaAgendada = c.getTime();
    
    long period = 86400000;
    dataComecaEnviar = 20180614;
    
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            d = new Date();
            if ((sdfHora.format(d).equals("2000")) && (Long.parseLong(sdfData.format(d)) >= dataComecaEnviar)){
                enviaClassificacaoGeral();
            }
        }
    }, horaAgendada, period);
}
        