Hibernate ScrollableResultSet неожиданный OutOfMemoryError
У меня есть Postgres DB, 7500 строк в таблице клиентов, -Xmx8m.
Query query = session.createQuery("select c from Client c");
ScrollableResults resultSet = query.setFetchSize(50).setCacheMode(CacheMode.IGNORE)
.scroll(ScrollMode.FORWARD_ONLY);
int i = 0;
while (resultSet.next()) {
Client client = (Client) resultSet.get(0);
System.out.println(client.getId());
i++;
if (i % 50 == 0) {
session.clear();
Thread.sleep(500);
}
}
session.clear();
resultSet.close();
Когда я запускаю свое приложение, я получаю следующее: .... 4188 java.lang.OutOfMemoryError: Превышен лимит накладных расходов GC
Затем я установил -Xmx1024m, запустил jvisualvm и получил это -
Почему я получил много строк???? Кто может объяснить, почему произошел OutOfMemory?
1 ответ
Так как это сеанс с состоянием. Объекты не выселены. В дополнение к session.clear()
сделать звонок session.flush()
, После сеанса с сохранением состояния все объекты будут находиться в памяти благодаря кибернетическому кешу первого уровня.
В противном случае используйте сеанс без сохранения состояния.
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html