当前位置: 首页 > 面试题库 >

使用不同版本的JDK以及相同的目标版本和源版本进行编译的Java是否保证相同的执行?

蒲勇
2023-03-14
问题内容

我们将更新创建从Java 7到Java 8的构建的CI系统。稍后,我们希望将项目一个接一个地迁移到Java 8。当然,我们希望能够为仍使用Java
7的旧版本创建错误修正版本。

如果我们将构建相同的源,目标版本和源版本从JDK 7转移到JDK 8,我们是否可以确定不会出现任何问题?我们在开发机器上进行了测试,没有任何问题。

在此之前,我们还将逐步将部署服务器从JRE 7更新到JRE 8。

请注意,我们希望在CI系统上保留单个Java JDK安装,否则会变得很复杂。

更明确地说: 我对相同的执行结果更感兴趣,而不是对相同的字节码感兴趣。如果我正确理解的话,相同的字节码只会确认第一个(在相同的JRE上运行)。

在所有部署都在Java 8上运行之前,我们不会在代码中使用Java 8功能。因此,兼容性不是问题。


问题答案:

使用不同版本的JDK以及目标和源版本相同的Java编译是否会产生相同的字节码?

没有保证。

确实,使用相同编译器在相同硬件上使用相同选项从相同源代码创建的两个.class文件将具有相同的字节码,但是由于嵌入式编译时间戳记属性的原因,这些文件可能仍然有所不同。

我希望您 发现Java 7和Java 8编译器生成的字节码之间存在一些差异,但这无关紧要。



 类似资料:
  • 问题内容: 我采用了现有的旧Java代码库,并更改了一个类。我已经重新编译了Java 1.5.0中的代码库。然后,我成功地将此代码部署在Tomcat上。 为了测试我的部署,我向应用程序发送了一条消息,并在更改的类中遇到错误。 为ServletContext资源[/WEB- INF/ApplicationContext.xml]中定义的名称为’myClass’的bean加载类[com.MyClass

  • 我使用了一个现有的、旧的、Java的代码库并更改了一个类。我在Java1.5.0中重新编译了代码库。然后我成功地在Tomcat上部署了这段代码。 为了测试我的部署,我向我的应用程序发送了一条消息,并且我在更改的类中遇到了一个错误。 为ServletContext资源[/WEB-INF/ApplicationContext.xml]中定义的名为“MyClass”的bean加载类[com.MyClas

  • 我可能会对遗留项目进行一些交叉编译,并且在最近的JDK中我注意到,对于、和JVM参数,我们仅限于一些特定的版本。 如何获得这些参数的支持版本?

  • 我正在尝试迁移tomcat服务器。 两者都使用版本,并且都应该准备好将我的java/jsp文件从一台服务器带到另一台服务器。我做到了,并且我得到了错误。这很正常,因为在旧的版本中我有,在新安装中我有(均来自Oracle)。 我继续将第二个升级到1.8。一切都很好,因为在新版本中,java版本的输出是: java版本“1.8.0\u 191”java(TM)SE运行时环境(build 1.8.0\u

  • 我遇到了以下两个依赖项的问题: org.apache.felix"org.apache.felix.utils" 和 通用域名格式。github。rotty3000»phidias»0.3.2 它们都对组织有可传递的依赖关系。奥斯基。核心,felix依赖于版本4.1.0,phidias依赖于版本5.0.0 我们需要5.0.0版本才能正确编译代码 如果我把我的依赖项作为: Maven自动获取版本4.

  • 我在maven-compiler-plugin的pom.xml中有以下配置。 JDK的源版本和目标版本应该是什么?它如何依赖于安装在我的计算机上的jdk版本?他们可能不一样吗?例如,安装的jdk是1.8,在源参数-1.6,目标-1.7中。