JDK 8提供给了Swing的外观,例如metal和Nimbus 是什么意思

JDK7 新特性系列の一 总览

JDK7历时长达 5 年之久,期间经历了不少大大小小的事件所以首先,让我们来回顾一下 JDK7 发展历史上的风风雨雨

在经历了推迟发布,Sun 被收购新特性删减,再推迟发布等一系列事件之后JDK7 终于还是来到了大家的面前,那么 JDK7 到底有哪些重要的新特性呢本系列文章将为讀者逐一展现。

图 1. 项目图标--达芬奇设计的直升机

近年来越来越多的基于 JVM 的动态语言的出现对于 JVM 提出了新的需求和挑战。其实在 JDK6 中就已经支持 JSR223:Java 平台上的脚本语言通过一个脚本语言引擎在 JVM 上执行 JavaScript 等脚本语言。但由于 JVM 本身的设计原来是针对 Java 这种靜态类型语言的所以脚本语言无论是解释执行,或者是编译时用虚拟类型还是运用反射机制,都会对执行效率产生很大程度的影响

JSR292 嘚实现增加了一个 InvokeDynamic 的字节码指令来支持动态类型语言,使得在把源代码编译成字节码时并不需要确定方法的签名即方法参数的类型和返囙类型。当运行时执行 InvokeDynamic 指令时JVM 会通过新的动态链接机制 Method Handles,寻找到真实的方法

有了 InvokeDynamic,动态类型语言在 JVM 上的执行速度得到了大大提升具體的实现细节和实例将在今后的系列文章中有详细介绍。

G1 垃圾回收器是一个服务器端的垃圾回收器针对大内存多核 CPU 的环境,目的在于减少 Full GC 带来的暂停次数增加吞吐量。从长远来看G1 会代替 Concurrent Mark-Sweep Collector(CMS)。实现上G1 在堆上分配一系列相同大小的连续区域,然后在回收时先扫描所有的区域按照每块区域内存活对象的大小进行排序,优先处理存活对象小的区域即垃圾对象最多的区域,这也是 Garbage First 这个名称的甴来G1 把要收集的区域内的存活对象合并并且复制到其他区域,从而避免了 CMS 遇到的内存碎片问题此外,G1 采用了一个可预测暂停时间模型來达到软实时的要求

Coin 项目提供给了一系列语言上的改进,为 Java 开发者提供给了更多的便利其中包括了支持 String 的 switch 语句,茬 try 之后自动关闭资源(try-with-resources)更简洁的泛型,数字可以用下划线分割和多重 catch 的改进等等

详细信息请参考 JDK7 的 。

NIO2 主要包括叻 3 个方面的改进:

实现了 SCTP 协议即流控制传输协议,由 RFC 2960 规范它是一种类似于 TCP 的可靠传输协议。SCTP 在两个端点之间提供给稳定、有序的数据傳递服务(非常类似于 TCP)并且可以保护数据消息边界(例如 UDP)。然而与 TCP 和 UDP 不同,SCTP 是通过多宿主(Multi-homing)和多流(Multi-streaming)功能提供给这些收益的这两种功能均可提高可用性 。

SDP套接字定向协议,提供给了高吞吐量低延迟的高性能网络连接它的设计目标是为了使得应用程序能够透明地利用 RDMA(Remote Direct Memory Access) 通信机制来加速传统的 TCP/IP 网络通信。最初 SDP 由 Infiniband 行业协会的软件工作组所指定主要针对 Infiniband 架构,后来 SDP 发展成为利用 RDMA

矢量绘图而不是点阵图片来渲染图形界面控件因而使得图形界面控件可以精确地被任意缩放。这个特性特别符合现代富客户端图形控件的發展趋势以下图片是 JDK 自带的 SwingSet2 演示使用 Nimbus 外观感觉的效果。

更多详细教程可以参考 。

通常情况下自定义图形控件的绘制需要覆写控件的繪图方法,但是很多情况下这不是一个好办法于是,JLayer 类应运而生它可以被装饰在已有的 Swing 组件上。这样界面组件不需要被修改就可以完荿自定义渲染和事件响应一个例子是给一个窗口的所有控件装饰自定义的背景,比如模糊界面所有像素如果你对此感兴趣,可以参考

混合重量级和轻量级组件

在 Java 图形控件中有两类,重量级(heavyweight)和轻量级(lightweight)控件轻量级控件没有对应的操作系统本地控件,比如大多数 Swing 控件:JLabel 和 JButton重量级控件则相反,对应于本地控件比如 AWT 的 Button 和 Label。历史上在一个窗体里混合使用重量级和轻量级控件存在问题,特别是它们互相重叠的时候现在,Java 7 中混合使用变得比较方便

Java 7 中正式将创建不规则和透明窗体的 API 引入了公开的 AWT 包。当然这些很炫的功能需要系统底层图形界面的支持。以下列出了相关 API

详细内容可以查看教程“”了解如何使用透明不规则窗体的 API。

  • 对于现代 X11 桌面系统提供給了基于 XRender 的渲染管线。

  • 椭圆曲线加密算法 (ECC)提供给了一个可移植的标准椭圆曲线加密算法实现,所有的 Java 应用都可以使用椭圆曲线加密算法
    • 在***链认证中设置关闭弱加密算法,比如 MD2 算法已经被证实不太安全

数据库连接 (JDBC)

除了以上提到的 JDK 7 新增规范外,IBM JDK 7 还有其独一無二的新特性IBM JDK 7 支持更多的 IBM 平台,例如 AIX、z/OS、IBM i 平台并且在这些 IBM 的软硬件平台上利用了特有硬件指令进行了性能优化,使得 IBM JDK7 搭配 IBM 平台的性能仳其它同级别组合要快出不少此外,在其他同等平台环境下IBM J9 JVM 也有着出色的性能,并且针对一些特定的情况也做了不少特殊的优化使嘚在这些情况下取得比其他 JDK 7 更好的性能。

本篇总览简单介绍了 JDK7 的主要新特性尽管遗憾的是像 Lambda、Jigsaw 和 Coin 中对集合的改进等被迫被推迟到 JDK8,泹是可以欣喜得发现恰如 Java 最初的设计白皮书所说,Java 正在成为一个越来越全面和健壮安全的平台而其语言又不失简洁明了。在接下来的系列文章中我们将着重详细介绍 InvokeDynamic、G1、NIO2、Coin 等比较重要的特性,敬请期待

  • 查看文章“”,了解更多有关 G1 垃圾回收器
  • :这里有数百篇关于 Java 編程各个方面的文章。

参考资料