Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JVM 8退出代码-559038737(0xDEADBEEF)_Java_Jvm_Java 8_Jvm Hotspot_Jvm Crash - Fatal编程技术网

Java JVM 8退出代码-559038737(0xDEADBEEF)

Java JVM 8退出代码-559038737(0xDEADBEEF),java,jvm,java-8,jvm-hotspot,jvm-crash,Java,Jvm,Java 8,Jvm Hotspot,Jvm Crash,在升级到Java8之后,我的应用程序开始非决定性地失败。它不会引发异常或打印错误消息。它失败的唯一迹象是退出代码-559038737。有人遇到过这种情况吗?退出代码可能来自: Java8中有一些可能引入了bug 但在不知道类路径和代码的情况下,这只是一个有根据的猜测 也许您正在使用异步方式来使用Commons Exec: DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler(); Executor

在升级到Java8之后,我的应用程序开始非决定性地失败。它不会引发异常或打印错误消息。它失败的唯一迹象是退出代码-559038737。有人遇到过这种情况吗?

退出代码可能来自:

Java8中有一些可能引入了bug

但在不知道类路径和代码的情况下,这只是一个有根据的猜测

也许您正在使用异步方式来使用Commons Exec:

DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();

Executor executor = new DefaultExecutor();
executor.execute(cmdLine, resultHandler);

int exitValue = resultHandler.waitFor();

return exitValue;

因此,异常只会在resultHandler中捕获,而不会自动打印在stderr上?

如果您阅读十六进制消息,它会显示“死牛肉”。这是内存探查器用来指示内存无效的常用技巧。OP,您的应用程序实际上可能正在调用第三方代码中的某个地方的
System.exit(0xDEADBEEF)
。@MarkoTopolnik如果我找到使用System.exit的库作者,我将杀死他。我想我可以尝试在该函数上设置断点。在Java源代码中使用这个神奇的数字而不是在C中使用这个数字似乎很奇怪。如果我的猜测是正确的,那么您使用的是一个C爱好者编写的Java库。在Java上撒一点C魔法一定感觉不错:)作为记录,OXCAFEBABE似乎在JVM环境中更受欢迎。您是否认为JVM崩溃会导致Exec返回此退出代码,但不会捕获JVM打印出的错误输出?我在Java8中看到过类似的问题,当被调用的Java应用程序使用System.Exit()时,没有记录stderr输出。但是,未处理异常的堆栈跟踪的输出似乎被记录下来。我编辑了答案以解决该问题,可能您正在使用非阻塞方式使用该库,它不会自动打印堆栈跟踪。没有看到(某些)
stderr
输出(或
stdout
)在
System.exit()
上一点也不奇怪,因为输出缓冲区不会被刷新,或者在某些JVM上可能不会。
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();

Executor executor = new DefaultExecutor();
executor.execute(cmdLine, resultHandler);

int exitValue = resultHandler.waitFor();

return exitValue;