Я работаю над программой, которая анализирует данные из файла и сохраняет их в базе данных HSQLDB. Когда парсер сталкивается с данными, он создает объекты, которые сопоставляются с базой данных с использованием JPA/Hibernate. Моя проблема заключается в том, что во время выполнения разбора приложение использует все больше и больше памяти. Я успешно использовал кэшированные таблицы, чтобы после завершения разбора все было выпущено, но во время разбора он использует больше, чем мне комфортно.JPA/HSQLDB все еще есть всю мою память
Я попытался исправить это, вызвав методы flush
и clear
на моем EntityManager, но это не повлияло. Я также пытался убедиться, что Entity со ссылками на все остальные объекты хранится в памяти.
Крупнейшие объекты в памяти, похоже, hsqldb.Sessions. Может быть, HSQlDb кэширует множество данных для каждой транзакции? Кажется, чрезмерно нужно 1 ГБ ОЗУ, чтобы получить только БД, на 120 МБ на диске это не так?
Пожалуйста, сообщите, что я могу попробовать дальше.
Попробуйте вручную промывке диспетчер сущностей, а сохраняющиеся объекты. Вызов EntityManager.flush() может очистить ненужные ссылки в памяти. Но я не уверен, решит ли он вашу проблему. –
@feridcelik - я сейчас смываю, а затем очищаю :) – willcodejavaforfood