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外观