java - 在现代项目中使用具有较旧语言级别的 JAR 对性能有何影响?`

标签 java jar version packaging

我在一个公司环境中工作,在其存储库中有几个广泛使用、不经常更新的 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/

相关文章:

python - 在 Python 2.7 中将字符串更改为字节类型

java - EJB TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 不

java - 如何将 Authenticator 添加到 dropwizard 应用程序

java - 将平面 JSON 对象分配给多个类

android - 从 Android 库 (.jar) 调用 Activity ?

java - 如何找出正在使用的 JAXP 实现以及它是从哪里加载的?

java - 泛型 - 为什么有些版本不起作用?

java - 在 jar 文件中加载速度模板

java - 无法将 Spring Boot Java 应用程序提交到 Spark 集群

javascript - 未捕获错误 : Syntax error, 无法识别的表达式:不支持的伪:标签