Java SE 6 Update 10 发布,有何新特性呢?

  • Dio Synodinos
  • 张龙

2008 年 11 月 2 日

话题:Java语言 & 开发架构

Java SE 6 Update 10(6u10)在 Beta 版发布一年、下载量超过 100 万之后终于发布了,它被称为“Consumer JRE”。该版本主要关注于Java Plug-In,Sun 借助此版本兑现了对增强的富客户端用户体验的承诺,并为即将到来的JavaFX Desktop 1.0 做好了准备。

在 Java 6u10 中,Java Plug-In采用了完全重新设计的架构。它运行一或多个 Java 虚拟机实例,这些实例可以连接到浏览器以与周围的 Web 页面进行完全的交互,而不像以前在运行浏览器的那个操作系统进程中执行 applets。这种架构上的变化具有很多优点,同时引入了几个新特性

  • 增强的可靠性。运行 applet 的 JVM 在操作系统层次上与浏览器隔离开来。如果在运行 applet 的过程中出现了问题,或者是某个 applet 无法关闭,新的 JavaPlug-In 就会检测到问题并优雅地处理错误情况;而 Web 浏览器并不会受到影响。
  • 内置的 JNLP 支持。新的 plug-in 可以直接从 JNLP 文件中加载 applets,这统一了浏览器内和浏览器外(通过 Java Web Start)Java 内容的部署。开发者现在可以重用 JNLP 扩展以获得高级功能,如JavaFX 运行时库通过 OpenGL 实现的 3D 图形及 applets 中的planetary-scale terrain 可视化。Applets 现在可以访问 JNLP APIs 以进行持久化数据存储、本地文件系统访问、并完成其它有用的功能(通过沙箱代码)。
  • 基于单个 applet 的命令行参数。JVM 命令行参数可以指定给单个 applet,这就提供了更加精细的控制,如堆大小及 Java 2D 硬件加速特性。从 JNLP 中加载的 applets 将命令行参数与(或)系统属性合并到了 JNLP 文件中。旧式的 applets 可以在 Web 页面的 HTML 中嵌入这些参数。
  • 支持多个 JRE 版本。每个单独的 applet 实例都可以运行在不同的 JRE 上。该特性是面向企业用户的,他们更想让他们的 applets 运行在某个特定版本的 JRE 上,或者是特定的 JRE 家族上。新的 plug-in 既可以选择特定版本的 JRE,也可以选择特定的 JRE 家族。
  • 增强的 Java/JavaScript 通信。Web 浏览器中的 JavaScript 引擎与 Java 编程语言之间的桥梁已 被完全改写了。新的实现向后兼容,并且对 Java 与 JavaScript 之间相互调用的可靠性、性能和跨浏览器问题进行了重大改进。过去只能用在 Mozilla 中的“LiveConnect”功能,如调用静态的 Java 方法、实例化新的 Java 对象以及从 JavaScript 中引用第三方包,现在已被所有的浏览器支持了。
  • 改善的用户体验。新的 Java Plug-In 在后台启动 applets,这样 Web 浏览器就会一直保持响应。当 applets 出现在 Web 页面上时,它们就真的可以运行了。
  • 改进的 applet 生命周期管理。对 applet 生命周期方法init、start、stop 及 destroy的调用更加确定了,同时跨浏览器的行为也得到了改进。Applet 的类加载器缓存和以前的 applet 生命周期(保留其是为了向后兼容)都得到了完全支持,并且其行为也都得到了改进。
  • 更好的大容量堆的支持。此前,通过 Java 控制面板指定的 applets 最大堆空间很有限。新的 Java Plug-In 中修复了这种限制;applets 现在可以使用与命令行应用一样大的堆空间。
  • 对 Windows Vista 的支持更好。运行在 Windows Vista 中 IE 保护模式下的签名 applets 现在与常规的用户应用有着同样的权限,这减少了向 Windows Vista 移植的代价。

Java Plug-In 可用在 Internet Explorer 6 & 7 中,同时也可用在 Windows XP、Windows Vista、Solaris 及 Linux 上的 Firefox 3 中。现在 Mac 用户还无法使用它,Kirk Pepperdine 认为还需要再过一段时间

从过去的经历来看,Mac 用户还需要再等上一段时间才能使用上 Java Plug-In。

Jim Weaver设法在 Google Chrome Beta 中运行了 JavaFX applets。看起来 Chrome需要Java 6u10:

根据 Google 所述,Chrome 浏览器必须使用 Java SE 6 Update 10 才能在其中运行 Java。 正如我之前提到的,Java SE 6 Update 10 的一个目标就是解决 JRE 和 Java/JavaFX 的部署问题。Google Chrome 是一个很棒的、跨平台的浏览器,由于它需要该版本的 Java 以使得富客户端的 Java/JavaFX 程序更加灵活,因此这将提高 JavaFX applets 和应用的使用率。

之前版本的 JRE 已经达到了 14.5MB,因此其发布包常被 Java 社区所诟病。借助于 6u10,Sun 对部署进行了增强。Java Kernel 在线安装器可以使用户首次运行 applets 和 Java Web Start 应用时更快,而无需等待下载整个 Java 平台,因为默认的 Kernel 才 4-5MB。这种安装方式满足了大多数 Java applets 和应用的需要,同时也符合其他库的需要(在运行时可能会需要下载一些库以完成 Java Kernel 的安装)。此外,Java 的自动更新也得到了改进,这是通过即需即补(patch-in-place)的机制完成的,该机制使得用户可以更新 Java 平台中的特定组件而不是每次都下载并安装一个全新的 JRE。

Java Deployment Toolkit 还提供了基于 Java 的 Web applet/ 应用部署工具,该工具有一个简单的 JavaScript 接口,有助于检测用户的 Java 环境并确保使用了正确的 Java 版本

下面的 HTML 代码用来确保 Java 1.6 已被安装,然后会加载一个 Java applet:
<script src="http://java.com/js/deployJava.js"></script>
<script>
  deployJava.runApplet({codebase:"http://www.example.com/applets/",
     archive:"ExampleApplet.jar", code:"Main.class",
     width:"320", Height:"400"}, null, "1.6");
</script>

你可以查看deployJava.js来深入了解 deployJava 对象。

Java 6u10 的一个主要新特性就是Java Quick Starter (JQS),它改善了大多数 Java applets 和应用的初始启动时间:

Windows XP 和 Windows 2000 默认会启动 JQS,在 Windows Vista 中则不是必需的,因为 Vista 有自己的预加载机制。一个叫做 jqs.exe 的进程会在后台运行以便快速启动。在 Window 重启后会加载 jqs.exe。

通过周期性地将一些常用的 Java 文件预先读取到内存中(不会超过 20Mb),实现了启动性能的改进。接下来加载 Java 时,只需要很少的磁盘 I/O,而这会使启动速度明显变快。

继续来谈性能,Java 6u10 充分利用了基于 Microsoft Direct3D 9 API 的硬件加速图形管道来改进 Swing 应用的渲染,而这是由多种因素决定的,包括半透明度、倾斜度、任意的转换及其它的更多高级 2D 操作。

Java 6u10 还提供了一个新的跨平台感官,叫做Nimbus,它是由 2D 矢量图绘制的。Nimbus 基于Synth, 从 1.5 版开始 Synth 就是 Java 的一部分了,同时它为 Java UIs 提供了一个漂亮且现代感十足的感官。由于 Nimbus 完全用 Java 2D 矢量图而不是静态位图来绘制,因此它的大小只有 56KB,而且可以用任何方式进行渲染。有两种方式可以使用 Nimbus 感官,第一种是调用 UIManager.setLookAndFeel,第二种是在运行 Java 应用时传入 -Dswing.defaultlaf 命令行选项。

请查看 InfoQ 的Java 社区以了解更多关于 Java 平台的信息。

查看英文原文:Java SE 6 Update 10 is out but what does it deliver?

Java语言 & 开发架构