DeploymentRuleSet占用了大部分堆空间

时间:2018-01-24 20:01:10

标签: java heap jnlp heap-dump eclipse-memory-analyzer

我们在Java Web Start应用程序上获得了一个OOME 在分析JVisualVM中的堆大小时,我们发现在短时间内内存大幅增加。 每次运行应用程序时,以下内存消耗大致相同。

async.js

我已将堆转储导入Eclipse MAT。 我可以看到大部分堆都被DeploymentRuleSets占用 DeploymentRuleSet类的内部drs映射包含数万个包含相同jar

的条目

Memory consumption over 10 minutes

我已经调查了至少50个这些HashMap条目。它们包含相同的数据。附上截图 - 我已经取出了一些敏感的公司数据,但我确实三重检查了价值是否相同。我已经粘贴了2个RuleId对象的屏幕截图,但是你得到了图片

MAT leak suspect Same jar in DRS map entry 1

以下是我的疑问/疑问:

  1. 显而易见的一个:有没有人遇到过这样的事情?
  2. 查看RuleId类,它没有" equals"也不是"哈希码"方法实施。因此,预期将重复的条目插入到散列映射中,因为它将通过引用比较对象。 但是我已经用我们公司的其他JavaWebStart应用程序分析了不同的堆转储。他们都没有同样的问题。 drs地图只包含几百个条目,并且只有来自类路径的独特jar,所以我希望它能如何工作 因此我怀疑它是一个"核心java bug"而是我们特定的应用程序问题 你知道为什么一遍又一遍地将同一个jar插入到drsMap中吗?
  3. 我已将远程调试器附加到我们的JavaWebStart应用程序。我已经导入了核心java" deploy.jar"到类路径并在一些DeploymentRuleSet方法中放置一些断点。遗憾的是,即使DeploymentRuleSet内存增加,也没有一个被击中。有没有办法调试像这样的核心java的东西?看看DRS何时以及为何被触发
  4. 真的很有帮助

0 个答案:

没有答案