[英]Findbugs - Sequence of calls to java.util.concurrent.ConcurrentHashMap may not be atomic
[英]Memory leak org.jboss.modules.ModuleClassLoader. The memory is accumulated in one instance of java.util.concurrent.ConcurrentHashMap (on wildfly)
我正在升級我的JBoss版本,java和hibernate
JBoss 6 to wildfly 11
hibernate 4來休眠5.1
和java 6到java 8
但是我面對java堆的這個問題,79%的內存是由ConcurrentHashMap對象占用的,我做了堆轉儲和eclipse分析器,我看到主要錯誤來自這個錯誤
“類加載器/組件”org.jboss.modules.ModuleClassLoader @ 0x6c27d1230“占用2.877.603.336(79,10%)字節。內存累積在”java.util.concurrent.ConcurrentHashMap $ Node []“的一個實例中通過“系統類加載器”。
如果我看到細節,Dominator Tree中的累積對象顯示:
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)
我真的不明白為什么會這樣,因為使用舊技術,而不是這種情況發生。
SessionFactoryRegistry跟蹤應用程序創建的SessionFactory。 通常你只需要一個SessionFactory,創建一個SessionFactory很昂貴。 通常,SessionFactory在啟動時初始化,並自動注入Session對象。 有多種方法可以實現這一目標,但您可以從這里開始
最后是代碼中的一個錯誤,每次我有一個NOT_ACTIVE狀態時我都有一個“重新連接”,這次重新連接會在應用程序中構建新的連接並產生內存泄漏。
刪除此重新連接並排除NOT_ACTIVE狀態是此問題的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.