我要从以下版本升级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)
我真的不明白为什么会发生这种情况,因为使用旧技术而不是其中一种。
答案 0 :(得分:0)
SessionFactoryRegistry跟踪由您的应用程序创建的SessionFactory。通常,您只需要一个SessionFactory,创建一个SessionFactory会很昂贵。 通常,SessionFactory在启动时进行初始化,并自动注入Session对象。有多种方法可以实现,但是您可以启动here
答案 1 :(得分:0)
最后是代码中的错误,每当我具有NOT_ACTIVE状态时,我都会进行一次“重新连接”,这种重新连接会建立新的连接并在应用程序中产生内存泄漏。
删除此重新连接并排除NOT_ACTIVE状态是解决此问题的方法。