Java 使用G1 GC和trove库的JVM崩溃

Java 使用G1 GC和trove库的JVM崩溃,java,jvm-crash,trove4j,Java,Jvm Crash,Trove4j,我们有以下问题:在我们的一些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-

我们有以下问题:在我们的一些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上,我也从未见过这种情况。这个问题在最近的Java7版本中仍然存在。从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库,问题也会消失。不幸的是,我无法创建最小的测试套件,因此很难提交合理的错误报告。关于原因的任何想法,或者任何可以帮助我构建测试套件的想法?

G1GC在Java 6中还没有“准备好使用”;只有在Java7U4中,它才最终可以投入生产。请参阅以获取有关它的说明,当然还有更多关于谷歌的信息。

这似乎确实是一个JDK错误,由Java 7 update 65+修复。

您使用的是什么虚拟机-OpenJDK还是Oracle?根据你使用的是什么,有什么不同吗?这些机器上的位数(64/32位)有差异吗?您是否可以包括来自Java 7 update 5的崩溃,以表明它仍然是一个问题?我们使用的所有版本都是Oracle 64位。我们发现这个问题的最新版本是Java7U4。不幸的是,由于这里描述的严重错误,这个版本不得不从我们的系统中删除:这里:。据我所知,这个错误还没有在7u5中修复,这就限制了我们现在最多使用7u3。我将查看是否可以在其中一个受影响的系统上临时安装7u5并向您报告。
Java 1.7.0_17
-问题仍然存在。我刚刚遇到了此错误。你知道升级到1.7.0(40)会不会解决这个问题吗?“最新的Java 7版本仍然存在这个问题。”Bleah,你说得对-我在最初的帖子中没有提到这一点。我会在甲骨文的bug追踪器上记录一个bug,然后。。。我想,使用不同的GC,或者使用trove以外的其他东西。我想当我在那里看到JRE 6时,我没有想到有人会喜欢6而不是7,除非他们被卡住了。当然,最好的办法是暂时切换到另一个GC,并向Oracle提交一个bug。有趣的问题,是的。有趣。Java 1.7.0_17-问题仍然存在我们从未使用过那个特定的Java版本,但我可以确认这个问题在Java 8 Update 45中得到了解决。所以我想这确实是罪魁祸首。最后!:)