Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
将项目编译为Java1.3和Java1.8-有什么缺点吗?_Java - Fatal编程技术网

将项目编译为Java1.3和Java1.8-有什么缺点吗?

将项目编译为Java1.3和Java1.8-有什么缺点吗?,java,Java,我们有一个大的(旧的)JavaServlet项目,它仍然是为Java1.3编译的,我们只在我们自己的服务器上用现代的JRE运行这段代码 为1.3编译类而不是针对最新的现代1.8有什么缺点? 如果我们开始为1.8编译代码,是否存在任何风险?更重要的问题是,您将使用哪个JRE版本来运行旧代码 使用较新版本(即使代码只使用旧版本的语法和类)有利于利用较新版本应具有的所有错误修复和性能改进 至于使用较旧或较新的编译器,我认为假设较新的编译器将生成更高效的字节码是有意义的,因此即使代码保持不变,我也会使用

我们有一个大的(旧的)JavaServlet项目,它仍然是为Java1.3编译的,我们只在我们自己的服务器上用现代的JRE运行这段代码

为1.3编译类而不是针对最新的现代1.8有什么缺点?
如果我们开始为1.8编译代码,是否存在任何风险?

更重要的问题是,您将使用哪个JRE版本来运行旧代码

使用较新版本(即使代码只使用旧版本的语法和类)有利于利用较新版本应具有的所有错误修复和性能改进


至于使用较旧或较新的编译器,我认为假设较新的编译器将生成更高效的字节码是有意义的,因此即使代码保持不变,我也会使用较新的编译器。

更重要的问题是要使用哪个JRE版本来运行旧代码

使用较新版本(即使代码只使用旧版本的语法和类)有利于利用较新版本应具有的所有错误修复和性能改进


至于使用较旧或较新的编译器,我认为假设较新的编译器将生成更高效的字节码是有意义的,因此,即使代码保持不变,我也会使用较新的编译器。

从技术角度看,差异应该很小,如果有的话。自1.3以来添加的唯一字节码op是InvokedDynamic,1.3代码无论如何都不会使用它。优化通常在JIT编译器中进行,而不是在字节码编译器中进行,因此那里的任何更改都不太可能提高性能

但是,如果您时不时地重建它,我假设您至少还在对代码进行一些维护工作。先发制人地升级到新版本可能是个好主意,因为旧的源代码级别最终可能会被未来的JDK弃用。我能想到的唯一可以打破的是使用名称的变量,这些名称后来变成了保留字(例如
enum
),但一旦编译完成,它应该可以正常工作


长话短说,我建议您测试一下源代码级别,看看会发生什么。从技术角度来看,差异应该很小(如果有的话)。自1.3以来添加的唯一字节码op是InvokedDynamic,1.3代码无论如何都不会使用它。优化通常在JIT编译器中进行,而不是在字节码编译器中进行,因此那里的任何更改都不太可能提高性能

但是,如果您时不时地重建它,我假设您至少还在对代码进行一些维护工作。先发制人地升级到新版本可能是个好主意,因为旧的源代码级别最终可能会被未来的JDK弃用。我能想到的唯一可以打破的是使用名称的变量,这些名称后来变成了保留字(例如
enum
),但一旦编译完成,它应该可以正常工作


长话短说,我建议您测试一下源代码级别,看看会发生什么。很有可能它会很好地工作。

我看不出有任何负面影响。如果您只担心编译,那么大多数功能都是向后兼容的,所以您应该很好。您打算在哪里运行这些二进制文件?你的目标环境是什么?你说你是为Java 1.3编译的,但是你运行的是什么版本的JVM?(我真的希望它不是随1.3发布的版本。)我不确定,但我认为在以前的版本上运行会允许存在安全漏洞。如果您希望确保一定级别的安全性,那么您应该编译为仅与您熟悉的安全性级别(通过JRE版本)兼容。特别是,即使您的代码可能与较低的JRE兼容,也不应允许您的应用程序在具有已知安全漏洞的早期JRE版本上运行。您应该明确计划升级应用程序以在较新版本上编译/运行(假设您希望在可预见的未来继续使用它)。但是,在这样做之后,你应该对应用程序进行全面测试,因为你不能保证细微的更改不会在你的应用程序中造成问题。我不认为有任何缺点。如果你只担心编译,那么大多数功能都是向后兼容的,所以你应该没事。你打算在哪里运行这些二进制文件?你的目标环境是什么nt?你说你是为Java1.3编译的,但是你运行的JVM版本是什么?(我真的希望它不是随1.3发布的版本。)我不确定,但我认为在以前的版本上运行会允许存在安全漏洞。如果你想确保一定级别的安全性,那么你应该编译为只与安全级别兼容(通过JRE版本)具体来说,即使您的代码可能与较低的JRE兼容,也不应允许您的应用程序在具有已知安全漏洞的早期JRE版本上运行。您应该明确计划升级应用程序,以在较新版本上编译/运行(假设你想在可预见的未来继续使用它)。但是,你应该在这样做之后对应用程序进行全面测试,因为你不能保证细微的更改不会在你的应用程序中引起问题。OP询问的是编译。没有做出任何假设(据我所知)至于最终用户将使用什么JRE,除了JRE必须至少处于编译代码的级别之外。通过指定最小编译目标,您指定接受该目标(最低)我们只在自己的服务器modern中运行此代码jre@Jared是的,我知道。我原本以为编译器版本不会有什么不同