我在一个公司环境中工作,在其存储库中有几个广泛使用、不经常更新的 Java 库。一些库相当古老,并且是使用最早可追溯到 JDK 1.5 (Java 5) 的语言级别编译的。
我们积极开发的几乎所有 Java 项目都使用 Java 8 或更新版本,但它们依赖于一个或多个 JDK 1.5 级别的 JAR。
使用具有非常旧的字节码版本的 JAR 是否会导致性能下降?现代 JIT 能否即时更新旧的、低效的字节码?
最佳答案
记住:一次编写,随处运行!就您而言,这个口号非常合适。
一般来说,如果旧的 Java 代码正在发挥作用,就没有理由修改它。
多年来字节码没有太大变化,Java8 JRE 理解的字节码指令与 Java2 中已经存在的字节码指令有 99% 相同——添加的内容很少,因此从这个角度来看,没有必要更新旧的字节码。它在 Java8 下的运行速度将比在 Java5 下更快,因为 JRE 及其 HotSpot 引擎和类库都有很大改进。
类文件格式的变化更多是关于元数据的,类文件版本号也确保您不会在 Java6 JRE 下运行 Java8 程序,因为 Java6 JRE 缺少一半的 Java 类和方法。
变化很大的是Java类库和源语言。由于旧库无法了解以后的更改,因此它可能会比使用后来 Java 版本的所有功能的新编写的版本效率低。但我的猜测是,通过重新设计旧库获得的性能不值得付出努力。
最后是关于性能问题的一般建议:
如果它没有损坏,就不要修复它(= 在您知道您有性能问题之前不要优化)。
在优化之前,使用分析器找出瓶颈所在。相信我,瓶颈几乎不会出现在您预期的位置。
关于java - 在现代项目中使用具有较旧语言级别的 JAR 对性能有何影响?`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071843/