Hibernate Session limpar memoria

Olá amigos, fiz um programa simples em Java Desktop usando o hibernate acessando uma base Oracle, o sistema lê um arquivo csv, com 500000 linhas, onde estas linhas contém a chave da NFe, com esta chave faço um sql na tabela de notas requisitando o status dela na base.

Para ganhar performance eu realizo um select a cada 1000 linhas, ou seja fica algo parecido com isso SELECT STATUS FROM NOTA N WHERE N.CHAVE IN(…), onde dentro do IN eu coloco mil chaves para realizar a busca.

Com esta ideia eu vou realizar 500 sqls, onde cada um vai possuir 1000 chaves.

O problema é que durante o processo, a aplicação vai cada vez mais consumindo memoria, até chegar em um ponto onde ela esta com 250mb de memoria utilizada, o que faz ela parar, e o mais estranho não é gerado nenhum exception.

Removi o Hibernate e coloquei uma conexão JDBC pura, tudo vai bem, o processo é todo executado usando 30mb de memoria ram.

Resolvi o problema usando o JDBC puro, mas fiquei na duvida do porque este problema ocorre no hibernate, sendo que a cada SQL eu chamo o session.clear para que seja lmpa da sessão as informações do sql.

repito este código a cada 1000 linhas, ou seja 500 vezes.

try{
  session = Principal.sessionFactory.openSession();
  query = session.createSQLQuery(sql.toString());
  query.setTimeout(120);
  res = query.list();
  ....
  ...
  ...
}catch(Exception e){
} finally {
                if (session != null) {
                    session.clear();
                    session.close();
                 }
}

Creio que o problema não seja esse. Provavelmente você está mantendo outras coisas na memória, como o SesisonFactory.
Tem como postar o código da classe Principal?

Isso mesmo, o sessionFactory eu não mexo, apenas crio ele uma vez, e utilizo para criar as sessões, durante o tempo de vida da aplicação ele fica inalterado!

Mas o sessionFactory não tem um metodo para limpar o cache! ele apenas cria a sessão!