【发布时间】:2026-02-15 10:30:01
【问题描述】:
我的旧项目使用Java 6(1.6),不知道什么时候更新(Java 7),它们可以正常运行吗?
【问题讨论】:
标签: java backwards-compatibility java-7 java-6
我的旧项目使用Java 6(1.6),不知道什么时候更新(Java 7),它们可以正常运行吗?
【问题讨论】:
标签: java backwards-compatibility java-7 java-6
Oracle 的 java 6 和 java 7 之间存在已知的不兼容性official list(包括对公共 API 中二进制和源代码级不兼容性的描述)。
也可以看Java API Tracker项目中对API变化的独立分析:http://abi-laboratory.pro/java/tracker/timeline/jre/
报告由 japi-compliance-checker 工具生成。
【讨论】:
他们应该这样做,是的。 Java 具有相当强大的向后兼容性历史。但是,如果这些项目以任何方式重要,您仍应在部署任何类似生产环境的地方之前执行彻底的测试通过。
【讨论】:
应该没有任何兼容性差异,因为 JVM 基本相同。然而,现在还处于早期阶段,因此可能存在细微的差异,从而导致人们尚未意识到的问题。
例如Eclipse 在 Windows 上查看 java.exe 中的供应商,并为不同的供应商设置不同的命令行参数。 Java 6 update 22 存在问题,因为 Oracle 想将其从“Sun”更改为“Oracle”。我相信这已经改变了,所以它在 Java 7 中是“Oracle”(但在 Java 6 中仍然是“Sun”)
我的意思是,如果您编写通用 Java 代码,您应该不会有问题。但是,如果您做的事情有点不寻常,您可能需要重新测试您的应用程序。
【讨论】:
如前所述,向后兼容性在新的 Java 版本中是一个非常重要的方面,因此通常切换到更新的 Java 版本应该没有问题。然而,在这种情况下,Java 7 似乎在新的热点编译器优化中存在一些错误。 Apache 软件基金会已发出警告,称其产品 Lucene 和 Solr 受到这些错误的影响。
可以通过使用-XX:-UseLoopPredicate 启动java来关闭受影响的循环优化。
【讨论】:
AFAIS here,没有在 Java 7 中被弃用的 Java 6 功能,所以是的,您的项目应该可以正常运行。
【讨论】: