JDK 7 M5 包含了并发性和性能更新,但功能并不完整

  • Charles Humble
  • 晁晓娟

2009 年 11 月 29 日

话题:Java编程语言JVM语言 & 开发架构

Sun 的 Java SE 团队最近发布了JDK7 的第 5 个重要的版本 M5。该版本包括了 Coin 项目大致一半的特性,由 Doug Lea 等更新了 java.util.concurrent 包,还包括其他一些增强特性。

Coin 项目的新特性有:

  1. 改善了泛型实例创建的类型推断,原来它对类实例创建的类型推断比较有限,因此必须显示声明构造函数的参数类型,但如果这些参数能从上下文推断出来的话,就可以用一个类型参数的空集合来代替。这样,对于如下代码:

    Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

    你现在可以写为:

    Map<String, List<String>> anagrams = new HashMap<>();
  2. 支持二进制文字,在数字中支持下划线分隔符帮助阅读——比如:long creditCardNumber = 1234_5678_9012_3456L
  3. 在 Switch 语句中支持 String 了。

对于 java.util.concurrent 包的更新包括对 Phasers、TransferQueues 以及 fork/join 框架的支持。对这些已包含特性和那些还未确定包含的特性(如 Fences API 及 ParallelArray),Alex Miller 提供了一个非常好的总结

除此之外,Swing 加了一个新组件——JLayer,用来美化复合的组件以及截获子组件事件。而且 Sun 还扩展了椭圆曲线加密算法(elliptic curve cryptography)的实现,进而覆盖到所有其提供了 JRE 的平台(以前只在 Solaris 上可用)。M5 还包括了一系列性能相关的强化,比如一个新的更快的合并排序算法,它是 Josh Bloch 根据 Python 的“TimSort”改写而来的。在 VM 层,逃逸分析和把 64 位指针压缩为 32 位都是 HotSpot VM 默认支持的了,这样不仅降低了内存的消耗,而且提高了性能。

还有很多其他的修改,完整的列表可以参看这里

原以为 M5 是 Java 7 第一个功能完备的版本,但实际上在某些方面还有差距。下表详细列出了 M5 包含的主要特性。

vm 压缩的 64 位对象指针

G1 垃圾收集器(Garbage First GC)

JSR 292:VM 对非 Java 语言(动态调用)的支持
lang JSR 308:Java 类型的注解
core 升级类加载器架构

关闭 URLClassLoader 的方法

Unicode 5.1

JSR 166y:并发性和集合的更新

JSR 203:更多针对 Java 平台的新 I/O API(NIO.2)

SCTP(Stream Control Transmission Protocol——流控制传输协议)

SDP(Sockets Direct Protocol——套接字直连协议)

Elliptic-curve cryptography(ECC——椭圆曲线加密算法)
client 向前兼容 6u10 部署特性

针对 6u10 图形特性的新平台 API

Swing 的 Nimbus 外观

还需要完成的主要特性有:

  • 模块化(Jigsaw 项目)及支持模块化编程的相关语言和虚拟机(JSR 294)。
  • Coin 项目中的自动资源管理、集合文本、JSR-292 的语言级支持,以及简化变长参数方法的调用等。
  • 原来要在 M4 发布的 XML 堆栈更新。
  • Java2D 的 XRender 管道。
  • dual-pivot 快速排序的实现。

这些特性中有一些已经差不多快完成了,比如 dual-pivot 快速排序代码极可能在 M6 的第一个构建里出现,也就是 2009 年 12 月 3 日的 build77 。其他的还有一些差距。Jigsaw 项目一直在进展但现在只有 Linux 下 alpha 版的 M5 二进制版本能下载。JSR 294 也还没有完,而且 Alex Buckley 在专家邮件组里建议不要再继续推进简单模块系统的提议了:

既然 Jigsaw 和 OSGi 最初都在 JCP 之外定义,JSR 294 不见得就是定义一个统一这两者的模块系统的最佳场所。这一设计将取两者的最小交集,虽然初衷很好,但这种妥协却让人不悦。由于专家组(EG)对简单模块系统提议并没有明确支持,我希望以后不要在这上面浪费时间了。

JDK7 还有很长的路要走,Sun 已经决定在日程中再加 3 个里程碑发布,并且把完成版推迟到 M8(2010 年 6 月 3 日)。这样就可以让 JDK7 发布版包含更多的其他特性,如multi-catch和以前谈到过的闭包,但是这样会把最终发布日期推迟 6 个月,大概到 2010 年 9 月。

查看英文原文:JDK 7 Milestone 5 Includes Concurrency and Performance Updates, But Is Not Feature Complete

Java编程语言JVM语言 & 开发架构