У меня есть приложение, где мне нужно хранить много событий в базе данных.События происходят с частотой 5000 событий в минуту, и общее количество событий может доходить до миллионов.
Я использую пул соединений c3po.Я планировал сделать так, чтобы ** получить одно соединение из пула для приложения ** и использовать то же соединение для сохранения всех событий, как показано ниже:
- Connection conn = // создать соединение
Персистор персистор = новый перистор (conn) // вводит созданное выше соединение.
persistor.persistEvent (Event e) {conn.write (e);}
операторы и наборы результатов закрываются после каждой записи, но я не закрываю соединение (не возвращаю его обратно в пул) после каждого сохранения.Вместо этого соединения закрываются, когда приложение остановлено.
Я запустил приложение и после сохранения около 600 000 событий я взял heapdump (используя: jmap -dump: format = b, file = test-dump.hprof[PID]), чтобы проверить, что происходит в куче.
Я мог видеть, что существует огромный объект "com.mchange.v2.c3p0.impl.NewPooledConnection", который потребляет 500 МБ кучи).При анализе объекта я увидел, что он содержит рекурсию вложенных объектов одного и того же объекта (com.mchange.v2.c3p0.impl.NewPooledConnection).
Итак, вопрос в том, является ли объект огромным, потому чтоЯ не возвращал соединение с пулом после каждой записи, или я что-то не так делаю?