改变java版本

时间:2008-11-04 12:51:36

标签: java jvm version compatibility versions

我有一个在java 1.3上运行的服务器 - 客户端应用程序;我想逐步改为java 1.6,意思是前几个客户端,而不是其他客户端,最后是服务器...... 我想知道你能指导一些可能出现的常见问题吗?我应该照顾什么?

6 个答案:

答案 0 :(得分:11)

Sun试图保持高水平的向后兼容性,因此您可以简单地安装新的JVM并使用它重新启动应用程序。

描述Java 1.6与早期版本的向后不兼容性的文档是here。本文档还链接了Java 1.5Java 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'将编译代码而不将断言枚举作为关键字。

答案 1 :(得分:4)

在我的脑海中,在字段和局部变量中查找名称enumassert ...这些单词已成为java 1.4和5中的关键字.java 6编译器将标记如果它们看到它们就作为编译错误。

Yuval = 8-)

答案 2 :(得分:4)

Sun保留了每个新版Java引入的不兼容性列表。

1.4.2的最后一个文档包含指向JDK 1.0的兼容性说明的链接。

答案 3 :(得分:3)

通常,Sun的JVM的向后兼容性非常好,但并不完美。我已经看到三个非常大的应用程序从1.3迁移到1.5并且只遇到少量问题,其中最大的问题是一个Swing掩码进入无限的事件处理循环并冻结了1.4以下的应用程序

服务器部分不太可能导致问题,但是Swing中存在相当大的底层更改,特别是在1.3和1.4之间 - 例如,焦点子系统已被完全重写。

应用程序仍然可以毫无问题地运行,但你绝对应该进行广泛的测试。

答案 4 :(得分:2)

当我在一个小工具上从1.4.2移动到1.5时,很多东西都破了:屏幕刷新变得不稳定,元素移动等等。

Sun的JRE不保持所有内容的向后兼容性。有时,当项目被弃用时,它们会在很短的时间后完全消失。

我们用“库存”Java编写了一切,也使用了Sun的库。

我也看到过几个用纯Java编写的应用程序,在同一版本的JRE中的一个或两个平台上运行正常,但在其他版本的JRE上运行失败(我使用的产品现在在Windows上工作得很好,在Mac上运行正常OS X,在Linux上很不错,但在Solaris上失败 - 所有都使用相同的JRE。)

移动版本不是一个简单的步骤,除非应用程序非常小。

答案 5 :(得分:0)

我的经验是兼容性非常高。我只发现了一个我无法在当前版本上运行的应用程序。无论出于何种原因(没有来源,所以我没有深入研究),一个应用程序不会运行1.4.2以外的任何其他应用程序。我曾经处理过的所有其他东西(其中一些相当大)已达到1.6就好了。无需修改。

YMMV当然,所以你必须尝试看看......