Должен ли я часто вызывать EntityManager.clear(), чтобы избежать утечек памяти?

StackOverflow https://stackoverflow.com/questions/2243554

Вопрос

Я новичок в JPA/OpenJPA и заметил, что если я не позвоню EntityManager.clear() после того, как я сохраняю сущности, я получаю OutOfMemoryError (Я продолжаю добавлять новые объекты в цикле).Я не уверен, является ли это ожидаемым поведением или это просто глюк OpenJPA 1.2.1.

Итак, нужно ли мне самому явно отделять сущности?Если нет, то это все равно хорошая практика?

Это было полезно?

Решение

У меня нет большого опыта работы с JPA.Однако это будет полезно -
В JPA вы должны либо:
- Создайте новый EntityManager для каждой транзакции.
- Вызовите функцию Clear() после каждой транзакции, чтобы очистить контекст персистентности.

Другие советы

Зависит от того, сколько объектов вы добавляете в процесс сохранения (читай).Если вы обрабатываете большие числа (или некоторые объекты большие), то использование методаclear() может иметь смысл.Каждый раз, когда объект читается, он должен помещаться в кеш L1 с помощью реализации JPA.

Похоже, где-то в вашем дизайне что-то не так.Обычно сущность отделяется, когда она выходит за рамки диспетчера сущностей.И это одна из причин, по которой вы не можете лениво загружать отношения вне области действия.

Насколько я знаю, я редко использовал em.clear(), если вообще когда-либо.Я использовал реализацию Hibernate и Toplink Essentials.Опыта работы с OpenJPA пока нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top