在我的组织中,我们在Openl数位板中构建了规则,其中很少有20多个列条件。这将消耗所有的Java堆大小,然后应用程序挂起。有什么建议吗?
使用System.gc()进行手动垃圾收集,但无效
OpenL平板电脑提供的源代码
https://github.com/openl-tablets/openl-tablets/releases/tag/release-5.22.1/
将更多条件添加到条件列时,垃圾收集应该更有效,并且不消耗所有内存。
20列以上的任何内容都会开始消耗额外的内存,每次编辑,上载都会增加以前的内存利用率。
我们已经在Java堆大小为24 GB的32 GB linux服务器上尝试过,但是没有 解决问题
答案 0 :(得分:0)
您描述的问题是内存泄漏(不是垃圾收集器问题)。
由于某种原因,您的堆中占用了大量对象,由于在对象图中可以访问,因此无法被GC回收。
20列以上的任何内容都会开始消耗额外的内存,每次编辑,上载都会增加以前的内存利用率。
这意味着每次编辑,上传等都会泄漏一些内存。
您需要使用用于堆转储分析的工具来查找内存泄漏的原因。我可以建议免费的JVisualVM和Eclipse MAT。
我建议进行两个堆转储:
在堆转储分析工具中,您可以比较转储并查找正在泄漏的对象类型。同样的工具也可以让您跟踪从泄漏的对象实例到GC根的路径。