JVM中的分段错误用于堆栈溢出,但仅限于VMWare

时间:2012-02-26 13:36:27

标签: java jboss jvm vmware

我们在JBoss上运行了一个应用程序。这个应用程序有一个或两个错误导致它无限递归,导致stackOverflowException。不是最佳的,但不是灾难。

我们最近尝试迁移到VMWare,同样的异常现在变成了分段错误,导致整个应用程序服务器和JVM随之崩溃。

没有任何stackOverflowException这样做,到目前为止我无法创建一个简单的代码片段来重现这个bug。

为什么会出现这种差异?

3 个答案:

答案 0 :(得分:1)

这似乎是在Linux系统上运行的Oracle / Sun JVM HotSpot的错误。

如果您使用Oracle / Sun JVM尝试应用程序,则会出现Segmentation fault错误。另一方面,如果您尝试使用OpenJDK运行同一个应用程序,您可能会看到StackOverflow错误。

答案 1 :(得分:0)

处理内存的方式可能有所不同。即你有不同的操作系统版本,或者与VMWare的交互存在错误。

你是对的,这是不可能的。我还会检查您是否拥有当前支持的Java版本。

答案 2 :(得分:0)

如果JVM是segfaulting ,那么您的应用程序不涉及本机代码库(使用JNI或JNA调用),这就是某种平台错误的证据。

在这种情况下,很难确定真正的故障是在JVM中还是在VMWare中。我倾向于指责VMWare没有忠实地实现“普通”PC的行为。但是,当Java堆栈溢出并且处理器尝试读取或写入堆栈的保护页面时,JVM可能无法对x86或x86-64处理器的行为进行假设。