较新的JRE版本可以运行用较旧的JDK版本编译的Java程序吗?

jv4diomz  于 2023-04-28  发布在  Java
关注(0)|答案(2)|浏览(234)

我在运行Java程序和用Java版本1编译的相关库时会遇到任何问题吗?61。7(我正在使用1编译。7,而一些库使用1编译。6)并在1.7 JRE?

to94eoyn

to94eoyn1#

正如已经回答的那样,你是大多数安全的,大多数产品和第三方库将简单地工作。然而,确实存在(不是那么)罕见的二进制不兼容
这些不兼容性发生在使用较旧的JDK编译的类由于JDK本身引入的兼容性破坏性更改而无法在较新的JVM中运行的情况下(例如:例如,类删除类/方法可见性降低方法签名更改包更改)是在使用JDK编写和编译代码之后引入的。

Java 9及更早版本:

Oracle Java不兼容性的官方列表:

  • 在Java SE 9中,自Java SE 8起
  • 在Java SE 8中,自Java SE 7起
  • 在Java SE 7中,自Java SE 6起
  • 在Java SE 6中,从Java SE 5开始。0
  • 在Java SE 5中。0,自Java SE 1起。4.2

Java 9及更高版本:

兼容性工具
jdeprscan工具与JDK 9及更高版本一起打包,它可以验证兼容性,列出代码中不再使用的API并建议替代方案(!),您可以指定目标JDK版本(适用于JDK 17119876),系统会列出您目标版本的不兼容问题。

库情况下的附加注解:

一个合理的经验法则是,对于软件目标的JRE版本,使用库的最新稳定发布版本。显然,你会发现这个规则有很多例外,但一般来说,公共可用库的稳定性通常会随着时间的推移而增加。
当然,在更改依赖版本时,必须考虑API兼容性版本控制
同样,大多数流行的依赖关系将有这样的信息应该可用的网页。
然而,如果您使用的是一些比较晦涩的东西,您可以分辨出哪些JRE类是您的依赖项中编译的。
Here is a great answer on how to find out class version。您可能需要先解压缩JAR文件。

r6hnlfcb

r6hnlfcb2#

你不会遇到任何问题-这就是Java的魔力-它是向后兼容的。您可以在Java 8上运行Java 1中的几乎所有代码。Java 6代码没有理由不能在Java 8运行时上运行。
有趣的是,对于用Java 1编写的应用程序。4,你甚至有速度增加时,运行它们在以后的运行时。这是因为Java在不断发展,不仅仅是被称为“Java”的语言,还有JVM(Java虚拟机)。我仍然保留着10多年前的源代码,这些代码仍然有效,正如在最新的JVM中所预期的那样。
如果您想以Java 5 VM为目标,那么可以使用Java 8 SDK工具来实现。您最终可以指定希望支持的目标VM,只要您记住版本5 VM可能不支持版本8 VM支持的所有功能。
我刚刚在新的Java 8运行时上测试了我用Java 5编写的代码,一切都按预期工作,所以,即使我们现在有了更强大的语言和运行时,我们也可以继续使用我们过去的投资。仅仅这一点,Java就成为了公司最好的开发选择。

相关问题