内存泄漏org.jboss.modules.ModuleClassLoader。内存累积在java.util.concurrent.ConcurrentHashMap的一个实例中(在wildfly上)

时间:2019-04-25 11:34:17

标签: java hibernate jboss wildfly

我要从以下版本升级JBoss,java和hibernate版本

JBoss 6成为野蝇11

休眠4休眠5.1

和Java 6到Java 8

但是我在使用Java堆时遇到了这个问题,ConcurrentHashMap对象占用了79%的内存,我使用了eclipse分析器进行了堆转储,我发现主要错误来自此错误

“类加载器/组件“ org.jboss.modules.ModuleClassLoader @ 0x6c27d1230”占用2.877.603.336(79,10%)字节。内存存储在“ java.util.concurrent.ConcurrentHashMap $ Node [ ]”由“系统类加载器”加载。

如果我看到详细信息,则“统治者树”中的“累积对象”将显示以下内容:


org.jboss.modules.ModuleClassLoader -> 2.877.603.336 (Retained Heap)

-java.util.Vector @ 0x6c27d4db0 -> 2.877.123.872 (Retained Heap)

--java.lang.Object[20480] -> 2.877.123.840 (Retained Heap)

---class org.hibernate.internal.SessionFactoryRegistry -> 2.840.910.848 (Retained Heap)

-----org.hibernate.internal.SessionFactoryRegistry -> 2.840.910.168 (Retained Heap)

------java.util.concurrent.ConcurrentHashMap -> 2.840.909.848 (Retained Heap)

-------java.util.concurrent.ConcurrentHashMap$Node[256]-> 2.840.909.784 (Retained Heap)

我真的不明白为什么会发生这种情况,因为使用旧技术而不是其中一种。

2 个答案:

答案 0 :(得分:0)

SessionFactoryRegistry跟踪由您的应用程序创建的SessionFactory。通常,您只需要一个SessionFactory,创建一个SessionFactory会很昂贵。 通常,SessionFactory在启动时进行初始化,并自动注入Session对象。有多种方法可以实现,但是您可以启动here

答案 1 :(得分:0)

最后是代码中的错误,每当我具有NOT_ACTIVE状态时,我都会进行一次“重新连接”,这种重新连接会建立新的连接并在应用程序中产生内存泄漏。

删除此重新连接并排除NOT_ACTIVE状态是解决此问题的方法。