Jpa Wildfly上的Eclipselink性能

Jpa Wildfly上的Eclipselink性能,jpa,eclipselink,wildfly-8,Jpa,Eclipselink,Wildfly 8,我已经在Wildfly 8.1上运行了eclipselink v 2.5启用的应用程序。我注意到的问题是启动应用程序后内存增加,因为有大量以下类的实例(Visaul VM的快照): org.eclipse.persistence.internal.identitymap.HardCacheWeakIdentityMap$ReferenceCacheKey 13083824 13083824(3.1%)125806(1.4%) org.eclipse.persistence.internal.he

我已经在Wildfly 8.1上运行了eclipselink v 2.5启用的应用程序。我注意到的问题是启动应用程序后内存增加,因为有大量以下类的实例(Visaul VM的快照):

org.eclipse.persistence.internal.identitymap.HardCacheWeakIdentityMap$ReferenceCacheKey 13083824 13083824(3.1%)125806(1.4%) org.eclipse.persistence.internal.helper.linkedlist.LinkedNode 3020376 3020376(0.6%)125849(1.1%) org.eclipse.persistence.indirection.IndirectList 916608 916608(0.3%)14322(0.2%)

当我手动启动GC时,这些类不会发生任何变化,并且会继续增加实例总数

下面是我代码中的一个EJB示例,它显示了我访问持久性上下文的方式:

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import com.sh.entities.Groups;


@Stateless
public class GroupsFacade extends AbstractFacade<Groups> {

    @PersistenceContext(unitName = "WebApplication3PU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public GroupsFacade() {
        super(Groups.class);
    }

    public Groups getByGroupName(String name) {
        TypedQuery<Groups> query = getEntityManager().createNamedQuery("Groups.findByGroupName", Groups.class);

        query.setParameter("groupName", name);
        return query.getSingleResult();
    }
import javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
导入javax.persistence.TypedQuery;
导入com.sh.entities.Groups;
@无国籍
公共类GroupsFacade扩展了AbstractFacade{
@PersistenceContext(unitName=“WebApplication3PU”)
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共组facade(){
超级(组、类);
}
公共组getByGroupName(字符串名称){
TypedQuery query=getEntityManager().createNamedQuery(“Groups.findByGroupName”,Groups.class);
query.setParameter(“groupName”,name);
返回query.getSingleResult();
}
有人知道问题出在哪里吗?为什么会这样


谢谢。

间接列表通常由实体对象持有,而其他对象则与缓存有关。您需要查看您的应用程序,看看它是否持有实体和EclipseLink缓存设置-这些对象本身不一定会导致问题,这可能只是您使用应用程序的方式在内存资源方面需要更多。你好,Chris,我正在使用EJB,它有一个使用注入的上下文管理器引用。我已经在persistense.xml ENABLE_SELECTIVE中使用此标记禁用了缓存,但我仍然存在内存问题。我已经更新了主题,将其包含在用于访问实体的持久性单元的类中例如,它们将引用IndirectList和其他EclipseLink对象,这些对象反过来引用从中读取它们的上下文,而上下文又引用EntityManager一级缓存。EM管理的所有内容都被保留,直到调用clear为止,因此您可以试着调用EM.clear()。你真的应该检查这些对象是如何被保存的,而不是垃圾收集的-我相信你会发现你的应用程序中有东西间接地保存了它们。谢谢Chris,我将尝试清除EJB中@PreDestroy注释方法中的缓存,然后再次检查,真的感谢你的帮助