我们有以下问题:在我们的一些Linux 机器上,使用 trove 库和 G1 GC 的 Java 应用程序将很快崩溃,并显示以下类型的消息:
A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00002aaaaaef81d1, pid=31063, tid=1141000512
JRE version: 6.0_29-b11
Java VM: Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode linux-amd64 )
Problematic frame:
J gnu.trove.impl.hash.TObjectHash.insertKey(Ljava/lang/Object;)I
这里让我印象深刻的是有问题的框架,它总是一样的。我已经习惯了这里出现的一些库,但从来没有真正的 Java 代码。奇怪的是,一些应该具有相同设置的机器不受影响。在 Windows 上,我也从未见过这种情况。该问题在最近的 Java 7 版本中仍然存在。从 G1 GC 切换到任何其他 GC 可以立即解决问题。我们使用 Maven 解决的 trove 库,在那里尝试了几个版本,包括 3.0.3 - 总是同样的问题。
有谁知道这可能是什么原因?任何已知的 G1 GC 错误?trove 是否以可能产生此问题的特殊方式编译?
更新:不同的应用程序,不同的服务器,最新的 Java (7u5),类似的问题:
A fatal error has been detected by the Java Runtime Environment:
SIGSEGV (0xb) at pc=0x00002aadb7a38093, pid=14100, tid=46925573367184
JRE version: 7.0_05-b05
Java VM: Java HotSpot(TM) 64-Bit Server VM (23.1-b03 mixed mode linux-amd64 compressed oops)
Problematic frame:
J gnu.trove.map.hash.THashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
同样,切换到 G1 以外的 GC 会有所帮助。保留G1但去掉Trove库,问题也会消失。不幸的是,我无法创建最小的测试套件,因此很难提交合理的错误报告。关于原因的任何想法,或者任何可以帮助我构建测试套件的想法?