Wildfly 8.1 で実行されている eclipselink v 2.5 対応アプリケーションは、次のクラス (Visaul VM のスナップショット) のインスタンスが膨大な数あるため、アプリケーションの起動後にメモリが増加することに気付きました。
org.eclipse.persistence.internal.identitymaps.HardCacheWeakIdentityMap$ReferenceCacheKey 13083824 13,083,824 (3.1%) 125,806 (1.4%) org.eclipse.persistence.internal.helper.linkedlist.LinkedNode 3020376 3,020,376 (0.6%) 125,849 (org.1%) eclipse.persistence.indirection.IndirectList 916608 916,608 (0.3%) 14,322 (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();
}
問題がどこにあり、なぜこれが起こるのか知っている人はいますか?
ありがとう。