在现代项目中使用具有较旧语言级别的 JAR 对性能有何影响?`
What are the performance implications of using a JAR with an older language level in a modern project?`
我在一个企业环境中工作,在其存储库中有几个广泛使用、不经常更新的 Java 库。一些库相当古老,并且使用早在 JDK 1.5 (Java 5).
的语言级别编译
我们积极开发的几乎所有 Java 项目都使用 Java 8 或更新版本,但它们依赖于一个或多个 JDK 1.5 级 JAR。
使用具有非常旧的字节码版本的 JAR 是否会导致性能下降?现代 JIT 能否即时更新旧的、低效的字节码?
记住:写一次,运行到处!在你的情况下,这个口号真的很合适。
一般来说,如果旧的 Java 代码正在发挥作用,就没有理由修改它。
多年来字节码没有太大变化,Java8 JRE 理解的字节码指令与 Java2 中已经存在的字节码指令有 99% 相同 - 很少添加,所以从这个角度来看,没有必要更新旧的字节码。它 运行 在 Java8 下甚至比在 Java5 下更快,因为 JRE 及其 HotSpot 引擎和 class 库都有很大改进。
class 文件格式的变化更多是关于元数据,class 文件版本号也确保您不会 运行 [=34= Java6 JRE 下的 ]8 程序缺少一半 Java classes 和方法。
变化很大的是 Java class 库和源语言。由于旧库不知道以后会发生什么变化,因此它可能比使用后来 Java 版本的所有功能的新编写版本效率低。但我的猜测是,重新设计旧库所获得的性能不值得付出努力。
最后是关于性能问题的一般建议:
如果它没有坏,就不要修复它(=在你知道你有性能问题之前不要优化)。
在优化之前,使用分析器找出瓶颈所在。相信我,瓶颈几乎不会出现在您预期的位置。
我在一个企业环境中工作,在其存储库中有几个广泛使用、不经常更新的 Java 库。一些库相当古老,并且使用早在 JDK 1.5 (Java 5).
的语言级别编译我们积极开发的几乎所有 Java 项目都使用 Java 8 或更新版本,但它们依赖于一个或多个 JDK 1.5 级 JAR。
使用具有非常旧的字节码版本的 JAR 是否会导致性能下降?现代 JIT 能否即时更新旧的、低效的字节码?
记住:写一次,运行到处!在你的情况下,这个口号真的很合适。
一般来说,如果旧的 Java 代码正在发挥作用,就没有理由修改它。
多年来字节码没有太大变化,Java8 JRE 理解的字节码指令与 Java2 中已经存在的字节码指令有 99% 相同 - 很少添加,所以从这个角度来看,没有必要更新旧的字节码。它 运行 在 Java8 下甚至比在 Java5 下更快,因为 JRE 及其 HotSpot 引擎和 class 库都有很大改进。
class 文件格式的变化更多是关于元数据,class 文件版本号也确保您不会 运行 [=34= Java6 JRE 下的 ]8 程序缺少一半 Java classes 和方法。
变化很大的是 Java class 库和源语言。由于旧库不知道以后会发生什么变化,因此它可能比使用后来 Java 版本的所有功能的新编写版本效率低。但我的猜测是,重新设计旧库所获得的性能不值得付出努力。
最后是关于性能问题的一般建议:
如果它没有坏,就不要修复它(=在你知道你有性能问题之前不要优化)。
在优化之前,使用分析器找出瓶颈所在。相信我,瓶颈几乎不会出现在您预期的位置。