OpenL平板电脑存在许多条件记忆问题的规则

时间:2019-04-24 18:10:47

标签: java garbage-collection

在我的组织中,我们在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服务器上尝试过,但是没有 解决问题

1 个答案:

答案 0 :(得分:0)

您描述的问题是内存泄漏(不是垃圾收集器问题)。

由于某种原因,您的堆中占用了大量对象,由于在对象图中可以访问,因此无法被GC回收。

  

20列以上的任何内容都会开始消耗额外的内存,每次编辑,上载都会增加以前的内存利用率。

这意味着每次编辑,上传等都会泄漏一些内存。

您需要使用用于堆转储分析的工具来查找内存泄漏的原因。我可以建议免费的JVisualVM和Eclipse MAT。

我建议进行两个堆转储:

  • 第一次重新启动应用程序
  • 少量编辑后第二秒,上传(避免填满整个内存,使用20GiB堆转储很痛苦)

在堆转储分析工具中,您可以比较转储并查找正在泄漏的对象类型。同样的工具也可以让您跟踪从泄漏的对象实例到GC根的路径。