我们在JBoss上运行了一个应用程序。这个应用程序有一个或两个错误导致它无限递归,导致stackOverflowException。不是最佳的,但不是灾难。
我们最近尝试迁移到VMWare,同样的异常现在变成了分段错误,导致整个应用程序服务器和JVM随之崩溃。
没有任何stackOverflowException这样做,到目前为止我无法创建一个简单的代码片段来重现这个bug。
为什么会出现这种差异?
答案 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处理器的行为进行假设。