Java Hibernate Утечка памяти - PullRequest
       7

Java Hibernate Утечка памяти

1 голос
/ 21 декабря 2009

Я занимаюсь разработкой приложения Flex с BlazeDS и испытываю утечку памяти при использовании java для запроса из MySQL в спящем режиме Может кто-нибудь сказать мне, как бороться с этой утечкой памяти? Кажется, что каждый раз, когда запрос вызывается, java.exe занимает больше памяти.

Спасибо

Образец моего Java

factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
EntityManager em = factory.createEntityManager();

Query find = em.createNamedQuery("Plan.findByStudentId");
find.setParameter("studentId", studentID);

List<Plan> c = find.getResultList();

return c;

Ответы [ 2 ]

2 голосов
/ 21 декабря 2009

Я предполагаю, что вы оставляете свой EntityManager открытым после того, как вернете данные в flex, что, в свою очередь, означает, что ваше MySQL Connection остается открытым. Вот откуда, скорее всего, и происходит утечка памяти. Итак - закрой свой EntityManager.

В другом комментарии вы сказали, что используете GlassFish. Это совершенно новый сценарий. Ваш класс это сервлет? EJB? Предполагается, что GlassFish управляет вашими EntityManager (если сам класс управляется), поэтому вам не нужно создавать или закрывать его самостоятельно. В таких случаях используйте аннотацию @PersistenceContext для добавления EntityManager (вместо использования Persistence.create..)

Но все, что вы должны сделать, независимо от настроек, это запустить профилировщик и посмотреть, где эта память выделена.

0 голосов
/ 21 декабря 2009

Привет, тебе просто нужно вывести свой код в блок try catch и закрыть менеджер сущностей.

try{
    if(em !=null){
        em.close();
    }
} catch(Exception e){
    e.printStackTrace();
} finally {
    em.close();
}
...