旧版本 Java.exe (7.1) 使用新版本运行时的含义 (8.x)

Implications of Old version of Java.exe (7.1) using new version of runtime(8.x)

我们的应用程序嵌入了 JRE。该应用程序错误地附带了一个混搭(7.x 版本的 java.exe 和 8.x 版本的其余 JRE)。

我可以使用 Process Explorer 确认进程 运行 v.1.7 java.exe 使用 v.1.8 java 运行时。我很惊讶运行时或二进制文件没有检测到异常并放弃 JVM 创建!

相同的含义是什么?安全问题 ?稳定性问题?我还没有查看 java.exe 的源代码。从我对 java.exe 二进制文件的初步调查来看,我可以看出它不仅仅是一个存根。除了 USER32.dll、ADVAPI32.dll、COMCTL32.dll.

之外,它调用了 100 个不同的 KERNEL32.DLL API

当然,我们可以(而且我们会)改正错误。但是对使用上述异常的几个当前生产系统有影响吗?如果是,它们是什么?

What are the implications of the same ? Security issues ? Stability issues ?

所有这些。

JVM 二进制文件(java.exe 在你的例子中),它附带的共享 objects/DLLs,以及实现 Java 方面的 JAR 文件都在一个运行 不是组合包,也不是组合包。

Java 7 和 Java 8 之间的兼容性问题的具体列表是已知的外部 整个 JVM 包的一致版本之间的问题。

您已将 internal incoherent Java 安装的不兼容性添加到那些已知的外部不兼容性。无法获得这些列表。几乎可以肯定,甚至没有人试图跟踪此类事情。

你不知道什么应该起作用,什么会起作用,也不知道它会起作用多久,即使它看起来起作用。

java.exea simple launcher。它不包含 JVM 或 Class 库代码。它的主要功能只是定位 JRE 并使用命令行中传递的参数加载 jvm.dll

即使没有 java.exe,您也可以使用 Invocation API 启动 JVM。

java.c log 表示 JDK 7 和 JDK 8 之间的启动器并没有太大变化。例如有一个对 JavaFX 应用程序的启动器支持和一些用于更好的参数验证的修复。而已。因此,如果您的应用程序使用 JDK 7 启动器启动良好,显然没有什么可担心的。