我们在Java Web Start应用程序上获得了一个OOME
在分析JVisualVM中的堆大小时,我们发现在短时间内内存大幅增加。
每次运行应用程序时,以下内存消耗大致相同。
async.js
我已将堆转储导入Eclipse MAT。
我可以看到大部分堆都被DeploymentRuleSets占用
DeploymentRuleSet类的内部drs映射包含数万个包含相同jar
的条目
我已经调查了至少50个这些HashMap条目。它们包含相同的数据。附上截图 - 我已经取出了一些敏感的公司数据,但我确实三重检查了价值是否相同。我已经粘贴了2个RuleId对象的屏幕截图,但是你得到了图片
以下是我的疑问/疑问:
- 显而易见的一个:有没有人遇到过这样的事情?
- 查看RuleId类,它没有" equals"也不是"哈希码"方法实施。因此,预期将重复的条目插入到散列映射中,因为它将通过引用比较对象。
但是我已经用我们公司的其他JavaWebStart应用程序分析了不同的堆转储。他们都没有同样的问题。 drs地图只包含几百个条目,并且只有来自类路径的独特jar,所以我希望它能如何工作
因此我怀疑它是一个"核心java bug"而是我们特定的应用程序问题
你知道为什么一遍又一遍地将同一个jar插入到drsMap中吗?
- 我已将远程调试器附加到我们的JavaWebStart应用程序。我已经导入了核心java" deploy.jar"到类路径并在一些DeploymentRuleSet方法中放置一些断点。遗憾的是,即使DeploymentRuleSet内存增加,也没有一个被击中。有没有办法调试像这样的核心java的东西?看看DRS何时以及为何被触发
真的很有帮助
醇>