JPA запрашивает утечку памяти?JAVA

Программисты JAVA общаются здесь
Ответить
Гость
 JPA запрашивает утечку памяти?

Сообщение Гость »


Мы профилировали наше приложение с помощью Jprofiler для устранения утечек памяти и обнаружили следующие наблюдения:
Мы запустили наше приложение на одном и том же наборе данных для проверки и сделали несколько снимков. после отметки Heap, чтобы увидеть классы, способствующие утечке памяти.
Изображение
Байт[], String, int[] после проверки их распределения указывают на запросы JPA . Например, все точки выделения для byte[] указывают на результаты запроса:

Код: Выделить всё

QuerImpl.getSingleResult
,

Код: Выделить всё

QueryImpl.getResultList

Код: Выделить всё

EnitiyManger.find
:
Изображение

Аналогичные результаты были получены для выделения строк, jav.util.HashMap$Node:
Изображение
Единственный запрос в JPA, который показывает значительное распределение, — это checkResourceID в классе Дао:

Код: Выделить всё

@Stateless
@EJB(name = "java:global/ResourceProceduresDaoImpl", beanInterface = ResourceProceduresDao.class)
public class ResourceProceduresDaoImpl implements ResourceProceduresDao {

@Resource(mappedName = "java:/M2M_RESOURCES")
private DataSource ds;

@PersistenceContext(unitName = "EM")
EntityManager em;
static Logger logger = LogManager.getLogger(ResourceProceduresDaoImpl.class);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss");

public void create(R resource) {
em.persist(resource);
em.flush();
}

public R retrieve(Class type, String resourceID) {
logger.info("ResourceProceduresDaoImpl class=" + type + " resourceID=" + resourceID);
Object obj = em.find(type, resourceID);
// logger.info("ResourceProceduresDaoImpl obj="+obj);
return (R) obj;
}

public void update(R resource) {
em.merge(resource);
}

public void delete(R resource) {
if (!em.contains(resource))
resource = em.merge(resource);
em.remove(resource);
}
public boolean checkResourceID(String resourceID) {
boolean ifExists = false;

if (em.createNamedQuery("ResourcePCM.findByResourceID", ResourceParentChildMapping.class)
.setParameter("resourceId", resourceID).getSingleResult() == null) {

ifExists = true;
}

..//
return ifExists;
}
JPA для ResourcePCM:

Код: Выделить всё

    @Entity
@Table(name="\"RESOURCE_PCM\"",schema="\"RESOURCES\"")
@NamedQueries({
@NamedQuery(name="ResourcePCM.findAll", query="SELECT r FROM ResourcePCM r"),
@NamedQuery(name="ResourcePCM.findByResourceID", query="SELECT r FROM ResourcePCM r where r.resourceID = :resourceId")

})
@NamedStoredProcedureQuery(
name = "generateResourceID",
procedureName = "generateResourceID",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, type = String.class, name = "input"),
@StoredProcedureParameter(mode = ParameterMode.OUT, type = String.class, name = "output")
}
)
public class ResourcePCM implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@Column(name="\"resourceID\"")
private String resourceID;

@Column(name="\"structuredResourceID\"")
private String structuredResourceID;

@Column(name="\"parentID\"")
private String parentID;

@Column(name="\"resourceType\"")
private Integer resourceType;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name="\"resourceID\"",referencedColumnName="\"resourceID\"")
private Set resourceACP;

..///
}
Так вот только в запросах выделяется значительное количество памяти, и я не могу выяснить причину.
Это JPA
код> ? Или способ вызова EntityManager?
PS: я использую JNDI поиск для своих Beans, а не внедрение с помощью @EJB или @Inject, если это будет иметь значение?
EDIT
persistence.xml:

Код: Выделить всё



org.eclipse.persistence.jpa.PersistenceProvider
java:/M2M_RESOURCES
package.jpa.ResourceBase1
package.jpa.ResourceBase2
package.jpa.ResourceBase3
package.jpa.ResourceBase4
package.jpa.ResourceBase5
package.jpa.ResourceBase6

..///


package.mapping.DBJsonConverter








Источник: https://stackoverflow.com/questions/781 ... emory-leak
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»