Java SE 7最终版 语言和虚拟机将增强

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  Concurrency 和 Collections 更新

  Java 5 在 JSR 166 下引入了 java.util.concurrent 包,而 Java 6 又通过 JSR 166x 对其进行了进一步的扩展。然后,Java 7 通过 JSR 166y 对并发性再次进行了更新,提供了一个全新的 fork-join 框架,即 JSR 总监 Doug Lea 口中的 “多核友好轻量级并行框架”。其他增强还包括 TransferQueue 和 Phaser。

  1.Fork-join 框架

  fork-join 框架的目标是为可分解为多个并行任务的高性能计算任务提供支持,从而允许有效利用多个处理器及内核。

  典型示例演示,合并排序算法可以分解为多个并发任务。待排序数据将分解为可作为子任务独立排序的分段,同时子任务又有可能再度分解为更加小的子任务。子任务完成之后,整合结果(合并)。流程的原理是将特定任务分解为众多子任务,然后等待合并完成的任务。Java 7 中添加的 fork-join 框架提供了实现 fork-join 处理的基础设施,包括池处理和工作窃取,以降低等待其他子任务完成带来的影响。

  2.TransferQueue

  TransferQueue 是一种 BlockingQueue,但其不同之处在于提供了一个记录的交付服务。虽然将对象成功添加到队列中之后会返回一个将对象插入 BlockingQueue 的线程,但仅在另一个线程从队列中删除了对象之后才会返回负责将对象插入到 TransferQueue 中的线程。

  3.Phaser

  Phaser 类提供了一个全新的同步阻止对象,它与 Java 5 中已经引入的 CyclicBarrier 相类似,但提供了一些额外的特性。特别是动态更改注册方数量的能力。

  IBM 提供的增值特性

  除了每个新的 Java 平台发行版要强制更新的特性之外(由于JVM 规范和 Java 类库 API 的更新),每个 Java 供应商都允许向其 Java 功能包交付自己的增值特性。对于 IBM 的 Java 功能包,这些增值增强通常主要针对三个领域:性能、可靠性和可服务性。

  了解 IBM 的 Java SE 7 实现

  Java 运行时的性能是影响部署应用程序的投资回报率的直接因素。鉴于此,各种标准基准测试可用于模拟特定的部署场景或工作负荷类型,以便能对投资回报率有大致的理解。虽然大多数基准测试都侧重于运行时性能 ― 应用程序可以执行的速度 ― 但 IBM 还对应用程序的初始启动时间深感兴趣。

  启动性能

  Java 应用程序的启动性能是 IBM 团队的一个主要关注点,不仅因为启动时间会潜在影响客户端应用程序的适用性,还会影响服务器 href=”http://product.it168.com/list/b/0402_1.shtml” target=_blank>服务器端应用程序的再利用和故障转移场景的启动时间。

  在 IBM SDK for Java 5 中,IBM 提供了一个主要特性,用于以类共享的形式减少 Java 应用程序启动和重新启动的时间。这种方法允许将所有系统和应用程序类存储在共享内存的持久动态类缓存中,并且处于已经过类数据验证的状态(很重要)。其结果是,当 Java 应用程序载入类时,大量操作会在启动时发生,而共享内存则没有验证字节码的开销。

  在 IBM SDK for Java 6 中,IBM 针对启动性能继续在共享类缓存中添加了中度优化的 Just-in-time (JIT) 编译代码。这意味着可以消除启动过程的另一个主要开销:编译应用程序启动过程中涉及的常用方法。

  IBM SDK for Java 7 将进一步改善启动性能,专注于在共享缓存中存储更多数据以及在多线程上执行单线程启动活动等领域。

  运行时性能

  Java 应用程序的性能始终是大多数供应商所专注的领域。同样,IBM 的 Java 运行时也有一个优先领域。每个 IBM 运行时发行版都力争对上一发行版的性能进行增强。

  表 1 显示了 IBM SDK for Java 版本 5 和 6 之间的性能增强(在 AIX 上使用 IBM 32 位 Java 运行时):

  表 1. IBM SDK for Java 性能表

  注意:数据来自发布在 spec.org 上的 SPEC JBB2005 基准测试数据,在 IBM System p 570, 4.7 GHz 上使用 IBM Java Runtime。

  还是一样,对于 IBM SDK for Java 7 来说,运行时性能仍然十分重要。开放 beta 项目页面 将详细介绍最新的特性。

  可靠性

  Java 运行时的可靠性极为重要,这在 24×7 全天侯运行业务关键型应用程序时尤为突出。为了创建高度可靠的运行时,IBM 团队在开发过程中采用了大量质量流程,并使用代码库结构和测试战略来最大限度增加测试范围和场景。

  所有平台的公共代码

  自 IBM SDK for Java 5 发布以来,IBM Java 运行时实现的所有底层组件都建立在一个公共代码库的基础之上,它只有很少与平台或架构相关的代码。IBM 交付了 14 个 IBM SDK for Java 6 发行版,覆盖 31、32 和 64 位 Windows 和大型机上的 z/OS。广泛的硬件和操作系统配置可允许通过测试来确保大量场景的可靠性。通过扩展,查找和修复一个配置结果中的错误可以改善所有配置。这种广泛的测试场景将极大地改善发现时机和同步式错误的可能性。

  产品组合

  大多数 IBM Software Group 产品组合都使用 Java 代码。这意味着 IBM 不仅感兴趣于创建高质量、可靠的 Java 运行时,它还会对 IBM 软件产品线执行大量测试。应用于 Java 运行时的测试场景(包括测试开源产品)将结合测试这些 IBM 软件产品的大量典型部署和负荷场景。 这种测试广度和深度有助于确保 IBM Java 运行时的质量和可靠性。除了 IBM Software Group 产品组合之外,许多 ISV 合作伙伴还将测试针对 IBM 运行时的各种软件场景,进一步扩展用例覆盖面。

  可服务性

  与所有供应商相同,IBM 力争将应用程序部署做得完美无暇,但软件开发的一个被人接受的事实是难以避免容易造成意外结果的缺陷。为了理解问题的根源并加以解决,IBM 提供了监控和诊断功能及工具来帮助排除部署 Java 应用程序过程中或者 Java 运行时中的问题。

  调试功能

  转储引擎增强

  转储引擎支持生成各种不同类型的数据,从非破坏性系统转储到线程转储,甚至还可以选择执行特定命令行,以及在更广的事件条件下执行此操作。

  借助 IBM SDK for Java 7,您现在可以生成新的转储类型,包括 “栈” 类型,它可以为导致事件的线程生成一个单一的栈跟踪,并适用更多事件的情况,包括分配对象时发生的 “分配” 事件。

  跟踪引擎增强

  跟踪引擎可通过无检测的方式来跟踪 Java 运行时的内部以及在其上运行的 Java 代码内部的状况,包括核心类库、中间件代码或者您自己的代码。除了执行引擎跟踪代码之外,还可允许触发事件。从最基本的层面来说,您可以使用开关来开启或关闭跟踪,以便减少生成的跟踪数据量并生成转储,包括新的 jstracktrace 转储,它提供了调用代码栈跟踪以及一个 “睡眠” 选项,可用于在运行代码中插入任意延时。

  Java 转储增强

  javadump 文件包含执行运行时的状态概要,包括对应用程序中所有线程的栈跟踪。该文件也得到了增强。变更采用操作系统非限制(ulimits)和环境变量的形式,以及各线程的本机(C)栈跟踪,以便更好地洞察 Java 运行时代表 Java 代码的行为,或者任何 Java Native Interface (JNI) 代码中发生的事件。

  诊断收集器

  当一般保护故障或 OutOfMemoryError 等问题事件发生时,IBM Java 运行时会生成大量诊断文件,其中包含关于问题根源的有用信息。诊断收集器(Diagnostics Collector)工具会在诊断文件创建之后运行,搜索系统转储、Java 转储、堆转储、Java 跟踪转储和详细 GC 日志,获取问题的相关时间戳。然后,诊断收集器会生成一个经过压缩的 .zip 文件,其中包含问题事件的所有诊断,以降低所占用的磁盘容量,并消除手动搜索可能存在或不存在的文件的需求。

  IBM 监控和诊断工具

  垃圾收集和内存可视化器(GCMV)

  GCMV 提供应用程序 verbose:gc 输出或操作系统内存监控数据的分析和视图,并以图形和表格的形式显示它们。它还提供了清晰的概要,并解释信息以生成一系列调优建议,以及检测 Java 内存泄漏。这种解释可允许您理解应用程序的内存使用配置文件,并通过调优改善垃圾收集器的性能。

  转储分析器

  转储分析器(Dump Analyzer)工具可帮助您使用操作系统级转储确定 Java 应用程序故障的根源。它提供一些独立的分析器,可生成解答特定问题的特定数据。这些分析器结合在一起,共同生成关于任何问题根源及应用程序状态的报表。

  健康中心

  健康中心(Health Center)是一个低开销实时监控解决方案,可允许您获取运行中 Java 应用程序的当前状态。健康中心以通俗易懂的方式提供关于性能、内存使用、管理、优化和分析的信息。特别要指出的是,健康中心提供了方法分析信息,可反映方法的调用频率以及调用栈跟踪,并提供关于应用程序中同步代码的信息,以及关于 Java 堆和总体流程的内存使用的数据。

  内存分析器

  通过使用 Diagnostic Tool Framework for Java (DTFJ) 扩展 Eclipse MAT,内存分析器(Memory Analyzer)将 Eclipse Memory Analyzer Tool (MAT) 的诊断功能引入了到 IBM Java 运行时中。此扩展允许 Java 堆分析使用操作系统级转储和 IBM Portable Heap Dumps (PHD),这样您便可以诊断内存泄漏的根源,分析应用程序的内存占用,查看 Java Collections 的大小和效率,以及理解应用程序在特定时间的状态。

  结束语

  Oracle 和 IBM 正在有条不紊地开发 Java 7 SDK。虽然发行版的规范和内容在不断发生变化,但本文中的信息应该能让您更好地理解当前的状况。您还可以通过 Early Access 项目来持续跟踪开发进展,从而帮助您融入开发过程并获取关于重要特性及功能的反馈。

[1][2]

人生就是一场旅行,不在乎目的地,

Java SE 7最终版 语言和虚拟机将增强

相关文章:

你感兴趣的文章:

标签云: