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

Другие вопросы по тегам