Programa acumula muita memória

Senhores, tenho um programa que lê um arquivo TXT, porem esse arquivo é bem grande, e com o passar o tempo o tamanho do programa que está em execussão fica muito grande, como faço pra isso melhorar?
Ouvi alguma pessoas falando pra dar um flush, como faço isso ?
aqui vai um trecho do Código:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        Date horario = null;

        try {
           Path path = Paths.get("C:Caminho");
//            Path path = Paths.get("C:/Export/interface.log");
            List<String> linhas = Files.readAllLines(path, Charset.forName("ISO8859-1"));
            int linhaEncontrada = -1;
            long resultado = -1;

            linhaEncontrada = buscaAUltimaPalavra(linhas);
            String[] textosQuebrados = linhas.get(linhaEncontrada).split(" ");
            String dataString = textosQuebrados[0].substring(1);
            String horaString = textosQuebrados[1].replaceAll("]", "");
            System.out.println("teste " + linhaEncontrada);
            try {
                horario = sdf.parse(dataString + " " + horaString);
                resultado = (new Date().getTime() - horario.getTime()) / 1000;
            } catch (ParseException ex) {
                //Logger.getLogger(ConsultaLog.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (resultado == -1) {
                // nao faz nada
            } else if (resultado > 300) {
                LeituraLog.ballcat.setIcon(new ImageIcon(getClass().getResource("/leituralog/img/circle_red.png")));
                sendemail teste = new sendemail();
                teste.enviarEmail();
            } else {
                LeituraLog.ballcat.setIcon(new ImageIcon(getClass().getResource("/leituralog/img/circle_green.png")));
            }

        } catch (IOException ex) {
            Logger.getLogger(ConsultaLog.class.getName()).log(Level.SEVERE, null, ex);
        }

        return horario;
Files.readAllLines(path, Charset.forName("ISO8859-1"));

Essa linha carrega o arquivo inteiro na memória. Para melhorar isso, você pode utilizar uma InputStream e ler o arquivo linha por linha. Dessa forma, você vai gastar um pouco mais de tempo para pesquisar no arquivo (já que vai fazer várias leituras de disco), mas vai utilizar bem menos memória.

Classes úteis:

FileInputStream: uma InputStream para ler de arquivos
FileReader: Um InputStreamReader de arquivos
BufferedReader: Uma classe com métodos de leitura de streams bem úteis, como public String readLine(), que devolve a próxima linha da stream (no teu caso, do arquivo). Você pode construir um BufferedReader com o FileReader.

Exemplo:

BufferedReader leitor = new BufferedReader(new FileReader("C:Caminho"));
String proximaLinha;
while ((proximaLinha = leitor.nextLine()) != null) {
    ...
}

A classe Files que está usando tem um método similar ao “readAllLines” que é o “lines”.
A diferença é que ele retorna uma stream ao invés de uma lista (e isso é bom que com a stream você nao carrega tudo na memória.

Mas streams você pode percorrer apenas uma vez. No seu caso nao será problema, basta você alterar seu método “buscaAUltimaPalavra” para retornar a linha desejada ao invés de retornar o indice da lista.
Aliás, uma boa idéia era repensar o nome desse método. buscaAUltimaPalavra parece que vai retornar a última palavra e nao um indice da lista.