2013-11-26 3 views
1

, 나는 Plumbr에서 메모리 누수 탐지 보고서가 계속 누출하는 JDOPersistenceManagerJDOPersistenceManager 메모리가 JDO JDOPersistenceManager를 사용

를 생성하고 파괴하는 올바른 방법은 무엇입니까

Plumbr 보고서 :

객체가

에서 생성됩니다
org.datanucleus.api.jdo.JDOPersistenceManagerFactory.newPM(org.datanucleus.api.jdo.JDOPersistenceManagerFactory, java.lang.String, java.lang.String):838 

및 개최되고있다

in key of java.util.HashMap$Entry 
in table of java.util.HashMap 
in map of java.util.HashSet 
in pmCache of org.datanucleus.api.jdo.JDOPersistenceManagerFactory 
in pmf of com.example.MyServlet 

마지막 줄인 pmf는 객체를 초기화하고 요청의 수명 동안 사용되는 싱글 톤입니다. MyServlet은 httpservlet이고 doPost가 호출됩니다.

PMF.java

: 그래서 PMF의 singlton 처분하는 올바른 방법을 무엇

PersistenceManager pm = pmf.getPersistenceManager(); 

    try { 
    //do stuff 
    } 
    finally { 
    pm.close(); 
    } 

:

public class PMF { 

    private static PersistenceManagerFactory instance; 

    public static PersistenceManagerFactory get() { 

     if (instance == null) { 
      Properties props = new Properties(); 
      props.setProperty("javax.jdo.PersistenceManagerFactoryClass", 
        "org.datanucleus.api.jdo.JDOPersistenceManagerFactory"); 
      props.put("datanucleus.PersistenceUnitName", "pmf"); 
      instance = JDOHelper.getPersistenceManagerFactory(props); 
     } 
     return instance; 
    } 
} 

는 일반적으로 내가 시도/finally 블록 및 사용 PMF에서 PMF 인스턴스를 사용 plumbr에 의해보고 된 메모리 누수가 발생하지 않도록?

+0

당신이 당신의 서블릿의 분야에서 어떤 객체를 저장하고 호출 할 수 있습니까? 서블릿은 한 번 생성되며 싱글 톤입니다. – NamshubWriter

답변

1

org.datanucleus.api.jdo.JDOPersistenceManagerFactory의 소스 코드로 판단하면 요청이 끝날 때 instance.releasePersistenceManager (pm)를 호출하여 PersistanceManager를 적절히 삭제하고 Factory의 캐시에서 제거해야합니다.

그리고 우리의 도구 : Plumbr 개발자를 사용하여 주셔서 감사합니다

0

나는 Nikem의 응답 작품을 모르는 당신이 명시 적으로 내부적으로 호출 public void releasePersistenceManager(JDOPersistenceManager pm)

  1. 때문에 전화를해야한다고 생각하지 않습니다 JDOPersistenceManager의 public void close().

  2. The comments for this method는 말한다 :

가 만 PersistenceManager에이 방법