【发布时间】:2010-09-20 16:19:12
【问题描述】:
我有一个在 java 1.3 上运行的服务器 - 客户端应用程序;我想逐步更改为 java 1.6,这意味着前几个客户端,而不是其余客户端,最后是服务器... 我想知道您能否指导我解决一些可能出现的常见问题以及我应该注意什么?
【问题讨论】:
标签: java jvm version compatibility versions
我有一个在 java 1.3 上运行的服务器 - 客户端应用程序;我想逐步更改为 java 1.6,这意味着前几个客户端,而不是其余客户端,最后是服务器... 我想知道您能否指导我解决一些可能出现的常见问题以及我应该注意什么?
【问题讨论】:
标签: java jvm version compatibility versions
Sun 试图保持高水平的向后兼容性,因此您可以简单地安装新的 JVM 并使用它重新启动您的应用程序。
描述 Java 1.6 与早期版本的向后不兼容性的文档是 here。本文档也链接了Java 1.5 和Java 1.4 的兼容性文档。您可能想阅读此文档以了解可能存在的陷阱。
Java 1.5 和Java 1.6 引入了新的类文件格式。 JVM 也会运行旧的类文件,但是重新编译你的代码——尤其是 JDK 1.6——将帮助新的 JVM 利用一些变化来使你的应用程序更快。所以你可以考虑重新编译。
另外引入了一些新的关键字,即 assert(在 1.4 中)和 enum(在 1.5 中)(正如 Yuval 已经提到的)。如果您使用这些词作为标识符,重新编译将失败,但旧的类文件将起作用。您可以将开关-source 提供给javac 以使其编译:'javac -source 1.3' 将编译没有assert 和enum 作为关键字的代码。
【讨论】:
一般来说,Sun 的 JVM 的向后兼容性非常好,但并不完美。我见过三个非常大的应用程序从 1.3 迁移到 1.5,并且只遇到了少量问题,其中最大的一个是一个 Swing 掩码进入了无限的事件处理循环并在 1.4 下冻结了应用程序
服务器部分不太可能引起问题,但在 Swing 中发生了相当大的底层变化,尤其是在 1.3 和 1.4 之间 - 例如,焦点子系统被完全重写。
应用程序仍有可能毫无问题地运行,但您绝对应该进行广泛的测试。
【讨论】:
我的经验是兼容性相当高。我只发现了一个无法在当前版本上运行的应用程序。无论出于何种原因(没有源代码,所以我没有深入研究),一个应用程序不会在 1.4.2 以外的任何东西上运行。我曾经处理过的所有其他事情(其中一些相当大)都达到了 1.6 就好了。无需修改。
当然是 YMMV,所以你必须尝试一下然后看看......
【讨论】:
Sun 保留了每个 Java 新版本引入的不兼容性列表。
1.4.2 的最后一个文档包含指向 JDK 1.0 的兼容性说明的链接。
【讨论】:
在我的脑海中,在字段和局部变量中寻找名称enum和assert...这些词已成为java 1.4和5中的关键字。java 6编译器会将它们标记为编译错误如果它看到它们。
尤瓦尔=8-)
【讨论】:
当我在我工作的一个小程序上从 1.4.2 迁移到 1.5 时,很多事情都崩溃了:屏幕刷新变得很不稳定,元素被移动等等。
Sun 的 JRE 不保持对一切的向后兼容性。有时,当项目被弃用时,它们会在很短的一段时间后完全消失。
我们使用“普通”Java 编写所有内容,也使用 Sun 的库。
我还看到了几个用纯 Java 编写的应用程序,它们在同一版本的 JRE 中的一个或两个平台上运行良好,但在使用该版本的其他平台上却失败了(我使用的产品现在在 Windows 上运行良好,在 Mac 上运行良好OS X,在 Linux 上不错,但在 Solaris 上失败 - 都使用相同的 JRE)。
移动版本不是一个简单的步骤,除非应用程序真的很小。
【讨论】: