目录:
Java 技术,IBM 风格
Oracle 规范要点以及 IBM 的性能、可靠性和服务性增值服务
Chris Bailey
2010 年 6 月 02 日发布Weibo
Google+
用电子邮件发送本页面
系列内容:
此内容是该系列的一部分:Java 技术,IBM 风格
预计于今年秋天将最终发布的 Java 平台最新更新意义重大且倍受期待。虽然尚未通过 Java Community Process (JCP) 正式创建 Java 7 平台 Java Specification Request (JSR),并且最终特性集仍然未知,但 Oracle 推出的 Early Access 下载(参见 参考资料)以及 Oracle 团队的公开声明为我们理解 Java SE 7 的内容提供了一些帮助。
预计特性分为以下四类:
非 Java 语言支持和 JSR 292
Java 7 将提供一些增强,可允许动态类型语言的编译器实现程序更加轻松地为 Java 运行时生成实现,并允许这些实现以更高的性能运行。JSR 292 是变化的推动力。它引入了新的字节码和一系列新的 Java 类。
大多数情况下,Java 语言是强类型的,这需要指定在方法中传递或返回的参数类型。但是,在字节级,Java 则更加偏向于弱类型:操作数栈中的变量仅在属于相关原始类型或者一般为对象引用时才需要指定类型。在几乎所有情况中,字节级都使用弱类型。方法调用是一种例外情况,它会强制使用强类型 — 也就是说,调用方法时将使用它的完整签名,这包括参数和返回类型。在这种情况下,需要使用已知 Java 类型对 Java 方法进行调用。这会对动态语言造成问题,比如 Ruby、Python 和 Groovy,因为它们是动态类型(类型仅在运行时为可知)。
可以采用一些机制(通常基于反射或使用生成的调用程序)来避免这些问题并允许在 JVM 上运行动态语言,但它们会受到显著的性能影响。JSR 292 的引入旨在通过添加新 Java 字节码 invokedynamic 以调用动态方法,并结合 Java 语言关联机制来处理允许在运行时重写方法结构,来解决这些问题。
“易于开发” 特性
与 Java 平台之前的发行版相同,许多新语言特性将帮助简化常用结构所需的语法。
Project Coin
Project Coin 涵盖众多小变化(coins),旨在降低编写简单任务的复杂度,并改善生成代码的可读性。
switch (myString) {
case "one":
; break; case "red":
; break; Default:
; }
Map
> anagrams = new HashMap List
改进后的类型设置更改允许推断第二个 <> 结构&#xff1a;1>(); Map
> anagrams &#61; new HashMap<();
List
numbers &#61; ["one", "two", "three", "four", "five"];
static String readFromFile (String file) throws IOException {
try (BufferedReader reader &#61; new BufferedReader(new FileReader(file)) {
return reader.readLine();
} // resources are automatically closed here
}
闭包争论
闭包在 Java 社区引起了相当大的争议。纳入还是弃用&#xff1f;现在&#xff0c;最佳选择是什么&#xff1f;早在 2007 年&#xff0c;Brian Goetz 就对 当时的闭包进行了一番讨论&#xff0c;而这随着时间的流逝已经逐渐退去。Neal Gafter 始终拥护将闭包添加到 Java 语言中。他的 Java 闭包 页面提供了关于这一主题的大量信息。
闭包&#xff08;非 Coin&#xff09;
包括 Scheme、Ruby 和 SmallTalk 在内的许多编程语言都允许使用闭包或 lambda 函数。闭包实现有望添加在最终 Java 7 规范中&#xff1b;但是&#xff0c;详细实现尚不明确&#xff0c;因为有多个有竞争力的提议。
模块性支持
在每个新版本的 Java 平台中&#xff0c;SDK 的体积都有所增长 — 这一副作用是由各种环境中可用功能增加造成的。虽然许多功能都是资源&#xff0c;但过大的体积和复杂性会不可避免地影响一些关键性能指标&#xff1a;下载大小、启动时间和内存占用。
Project Jigsaw
访问 developerWorks roundtable&#xff0c;了解 Project Jigsaw 以及它在 Java 模块性解决方案中的位置。其中包含关于 Java 技术、文化和行业的最新信息。
为了解决这些问题&#xff0c;Java 7 计划提供一个模块化 JDK 运行时&#xff0c;即 Project Jigsaw。它将允许用户仅下载和加载运行应用程序所需的组件。此外&#xff0c;用户将能够将模块性应用到库和应用程序。最终实现尚未确定。
可伸缩性更新
随着多核系统的日益普及&#xff0c;以及这些系统中的内核数量不断增加&#xff0c;Java 语言向可伸缩性方面发展也是大势所趋。扩展是指开发人员需要访问可伸缩的集合、数据结构和算法。Java 语言在版本 7 中延续了在可伸缩性方面的增强&#xff0c;主要体现在两个特性中&#xff1a; 全新的 I/O 2 以及 Concurrency 和 Collections 更新。
全新的 I/O 2
Java 平台 1.4 发行版在 JSR 51 下引入了一组全新的 I/O (NIO) API&#xff0c;旨在允许开发可高度伸缩的 I/O&#xff0c;而不需要开发本地代码。JSR 51 主要专注于缓冲和渠道&#xff0c;并且提供了非阻塞复用 I/O。在版本 7 中&#xff0c;我们在 JSR 203 下加入了&#xff08;全新的&#xff09;New I/O API (NIO.2)&#xff0c;从而进一步扩展了在 1.4 中开始的工作。
NIO.2 API 涵盖三个主要增强领域&#xff1a;异步 I/O、经过更新的 SocketChannel 功能以及更强的文件系统接口。这些更新都将继续提供生成高度可伸缩 I/O 基础设施的功能。
Concurrency 和 Collections 更新
Java 5 在 JSR 166 下引入了 java.util.concurrent 包&#xff0c;而 Java 6 又通过 JSR 166x 对其进行了进一步的扩展。然后&#xff0c;Java 7 通过 JSR 166y 对并发性再次进行了更新&#xff0c;提供了一个全新的 fork-join 框架&#xff0c;即 JSR 总监 Doug Lea 口中的 “多核友好轻量级并行框架”。其他增强还包括 TransferQueue 和 Phaser。
坚持 fork
Java 7 期待已久的有力证据就是&#xff0c;Brian Goetz 撰写的这一流行的关于 fork-join 框架的两部分系列文章几乎是在两年前发表的。第 1 部分 介绍分解众多算法以便有效利用硬件并发性的机制&#xff0c;第 2 部分 则详细讨论 ParallelArray 类&#xff0c;该类可简化针对驻内存数据结构的并发排序和搜索操作。
IBM 提供的增值特性
除了每个新的 Java 平台发行版要强制更新的特性之外&#xff08;由于JVM 规范和 Java 类库 API 的更新&#xff09;&#xff0c;每个 Java 供应商都允许向其 Java 功能包交付自己的增值特性。对于 IBM 的 Java 功能包&#xff0c;这些增值增强通常主要针对三个领域&#xff1a;性能、可靠性和可服务性。
了解 IBM 的 Java SE 7 实现
Java 运行时的性能是影响部署应用程序的投资回报率的直接因素。鉴于此&#xff0c;各种标准基准测试可用于模拟特定的部署场景或工作负荷类型&#xff0c;以便能对投资回报率有大致的理解。虽然大多数基准测试都侧重于运行时性能 — 应用程序可以执行的速度 — 但 IBM 还对应用程序的初始启动时间深感兴趣。
详细了解 IBM 在 Java SE 7 中的参与
IBM 的 Java SE 7 首席架构师 Trent Gray-Donald 在此 播客 中提供了他对 Oracle Java 7 规范、IBM 增值功能以及 Java 技术发展水平的见解。
启动性能
Java 应用程序的启动性能是 IBM 团队的一个主要关注点&#xff0c;不仅因为启动时间会潜在影响客户端应用程序的适用性&#xff0c;还会影响服务器端应用程序的再利用和故障转移场景的启动时间。
在 IBM SDK for Java 5 中&#xff0c;IBM 提供了一个主要特性&#xff0c;用于以类共享的形式减少 Java 应用程序启动和重新启动的时间。这种方法允许将所有系统和应用程序类存储在共享内存的持久动态类缓存中&#xff0c;并且处于已经过类数据验证的状态&#xff08;很重要&#xff09;。其结果是&#xff0c;当 Java 应用程序载入类时&#xff0c;大量操作会在启动时发生&#xff0c;而共享内存则没有验证字节码的开销。
在 IBM SDK for Java 6 中&#xff0c;IBM 针对启动性能继续在共享类缓存中添加了中度优化的 Just-in-time (JIT) 编译代码。这意味着可以消除启动过程的另一个主要开销&#xff1a;编译应用程序启动过程中涉及的常用方法。
IBM SDK for Java 7 将进一步改善启动性能&#xff0c;专注于在共享缓存中存储更多数据以及在多线程上执行单线程启动活动等领域。
运行时性能
Java 应用程序的性能始终是大多数供应商所专注的领域。同样&#xff0c;IBM 的 Java 运行时也有一个优先领域。每个 IBM 运行时发行版都力争对上一发行版的性能进行增强。
表 1 显示了 IBM SDK for Java 版本 5 和 6 之间的性能增强&#xff08;在 AIX 上使用 IBM 32 位 Java 运行时&#xff09;&#xff1a;
表 1. IBM SDK for Java 性能表
注意&#xff1a;数据来自发布在 spec.org 上的 SPEC JBB2005 基准测试数据&#xff0c;在 IBM System p 570, 4.7 GHz 上使用 IBM Java Runtime。
还是一样&#xff0c;对于 IBM SDK for Java 7 来说&#xff0c;运行时性能仍然十分重要。开放 beta 项目页面 将详细介绍最新的特性。
可靠性
Java 运行时的可靠性极为重要&#xff0c;这在 24x7 全天侯运行业务关键型应用程序时尤为突出。为了创建高度可靠的运行时&#xff0c;IBM 团队在开发过程中采用了大量质量流程&#xff0c;并使用代码库结构和测试战略来最大限度增加测试范围和场景。
所有平台的公共代码
自 IBM SDK for Java 5 发布以来&#xff0c;IBM Java 运行时实现的所有底层组件都建立在一个公共代码库的基础之上&#xff0c;它只有很少与平台或架构相关的代码。IBM 交付了 14 个 IBM SDK for Java 6 发行版&#xff0c;覆盖 31、32 和 64 位 Windows 和大型机上的 z/OS。广泛的硬件和操作系统配置可允许通过测试来确保大量场景的可靠性。通过扩展&#xff0c;查找和修复一个配置结果中的错误可以改善所有配置。这种广泛的测试场景将极大地改善发现时机和同步式错误的可能性。
帮助塑造 IBM SDK for Java 7
开放 beta 项目 提供了对最新 IBM SDK for Java 7 beta 的许可访问。它提供了新技术和特性的预览版本&#xff0c;并允许您通过开放 beta 项目讨论提供反馈。
产品组合
大多数 IBM Software Group 产品组合都使用 Java 代码。这意味着 IBM 不仅感兴趣于创建高质量、可靠的 Java 运行时&#xff0c;它还会对 IBM 软件产品线执行大量测试。应用于 Java 运行时的测试场景&#xff08;包括测试开源产品&#xff09;将结合测试这些 IBM 软件产品的大量典型部署和负荷场景。 这种测试广度和深度有助于确保 IBM Java 运行时的质量和可靠性。除了 IBM Software Group 产品组合之外&#xff0c;许多 ISV 合作伙伴还将测试针对 IBM 运行时的各种软件场景&#xff0c;进一步扩展用例覆盖面。
可服务性
与所有供应商相同&#xff0c;IBM 力争将应用程序部署做得完美无暇&#xff0c;但软件开发的一个被人接受的事实是难以避免容易造成意外结果的缺陷。为了理解问题的根源并加以解决&#xff0c;IBM 提供了监控和诊断功能及工具来帮助排除部署 Java 应用程序过程中或者 Java 运行时中的问题。
调试功能
IBM 监控和诊断工具
结束语
Oracle 和 IBM 正在有条不紊地开发 Java 7 SDK。虽然发行版的规范和内容在不断发生变化&#xff0c;但本文中的信息应该能让您更好地理解当前的状况。您还可以通过 Early Access 项目&#xff08;参见 参考资料&#xff09;来持续跟踪开发进展&#xff0c;从而帮助您融入开发过程并获取关于重要特性及功能的反馈。
相关主题