部署到Java SE 7运行时环境的Java SE 6编译应用程序 - 随机JVM崩溃,没有Throwables?

时间:2014-08-05 08:51:04

标签: java jvm java-7 jdk1.6

与主题一样,我使用部署在Java 1.7运行时环境中的Java 1.6编译了Java SE应用程序。由于Java是高度向后兼容的,我认为一切都会很好 - 但是自从它在1.7环境中部署以来,用户正在经历随机的JVM崩溃 - 即整个JVM随机退出。

任何错误日志中都没有任何内容(捕获所有throwable) - 这表明这种情况发生在我的应用程序之外。

预计会出现这种情况吗?

2 个答案:

答案 0 :(得分:2)

将Java 6(或更早版本)库与Java 7 JVM一起使用应该可以正常工作。

您检查过致命错误日志吗? 当JVM崩溃时,将使用默认名称java_error pid .log编写错误日志。 您可以使用标记-XX:ErrorFile={Path}/{Name of Log file}

指定名称
java -XX:ErrorFile=myerrorlogfile.log ...

答案 1 :(得分:2)

我认为,首先要关注的是获得异常。 导致异常未被记录的一些原因可能是:

  • 应用程序代码调用“System.exit”
  • 应用程序在执行某些低级汇编代码时崩溃了
  • 应用程序在VM启动或关闭期间崩溃

要处理此问题,请使用

执行应用程序
-Xdump:java:system:events=vmstop+user
-Xtrace:trigger=method{java/lang/System.exit,javadump} 
-Xcheck:jni:verbose

检查编译时和运行时是否与JDK实现相同(如Oracle JDK或OpenJDK)也很有用。从技术上讲,应该没有问题。但在实践中,我遇到了问题。

还尝试使用

增加堆大小
-Xms512m -Xmx1152m -XX:MaxPermSize=256m -XX:MaxNewSize=256m