Hibernate e OutOfMemoryError

Boa tarde pessoal, estou com o seguinte problema preciso ler uma tabela que tem cerca de 700 mil registros e passar esses dados para uma outra tabela. Pra fazer isso eu utilizei os métodos setFirstResult e setMaxResults do hibernate, onde firstResult começa em zero e vai incrementando em 25000 passo o número máximo tbm como 25000, ou seja, busco do registro 0 a 24999, depois de 25000 a 49999 e por ai vai.
isso está dentro de um loop e quando chega na quarta iteração do loop, ou seja, carreguei e inseri 75000 registros ocorre erro de java.lang.OutOfMemoryError
Não consigo entender o pq disso uma vez que os resultados estão “paginados”.

Segue o trecho do loop:

totalInsert = this.total.countInsert();
		do {
			list.clear();
			list= this.packingListDao.findInsert(
					firstResult, 25000);

			for (PackingListItem packingListItem : list){
				count++;
				total++;

				// alguns new

				// algumas buscas em bds 
                                
                                // e os insert dos dados nas novas tabelas

				// atribuição de null para objetos que foram criados com o new
			}
			firstResult += 25000;
			System.gc();
		} while (count != totalInsert);

e o trecho do dao

@SuppressWarnings("unchecked")
	public List<PackingListItem> findInsert(final int firstResult,
			final int maxResult) throws Exception {
		return this.getHibernateTemplate().executeFind(new HibernateCallback() {
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				String query = " from PackingListItem as packing where not "
						+ " exists ( select 1 from DpPackListItem as dp where "
						+ " dp.cdSExport = packing.cdPackingItem "
						+ " and dp.cdSExport = packing.cdPackingList )";
				Query sqlQuery = session.createQuery(query);
				sqlQuery.setMaxResults(maxResult);
				sqlQuery.setFirstResult(firstResult);
				
				return sqlQuery.list();
			}
		});
	}

Apos os inserts tente chamar o metodo flus() do objeto Session do Hibernate
tipo

session.save(cliente);
session.flush();

Esqueleto