我们有一个仍然为Java 1.3编译的大型(旧)Java servlet项目,我们只在我们自己的服务器上运行此代码并使用现代JRE。
编译1.3的类而不是针对最新的现代1.8的缺点是什么? 如果我们开始编译1.8的代码,是否有任何风险?
答案 0 :(得分:6)
更重要的问题是您将使用哪个JRE版本来运行旧代码。
使用较新的版本(即使代码仅使用旧版本的语法和类)也可以利用新版本应具备的所有错误修复和性能改进。
至于使用较旧或较新的编译器,我认为假设较新的编译器会产生更高效的字节码是有意义的,所以即使代码保持不变,我也会使用较新的编译器。
答案 1 :(得分:0)
从技术角度来看,差异应该很小,如果有的话。自1.3以来添加的唯一字节码操作是invokedynamic,1.3代码无论如何都不会使用。优化通常在JIT编译器中进行,而不是在字节代码编译器中进行,因此任何更改都不太可能提高性能。
但是,如果您不时地重建它,我认为您仍然至少在代码上进行一些维护工作。最好先推进到新版本,因为未来的JDK最终可能会弃用较旧的源代码级别。我能想到的唯一可以破解的是使用名称的变量,这些名称后来成为保留字(例如enum
),但是一旦编译它就应该可以正常工作。
长话短说,我建议你测试碰撞源级别,看看会发生什么。可能性很小。