dev2dev 首页 > 资源中心 > 技术文章
JRockit5.0 的新特性和工具
这篇文章描述了 BEA JRockit 5.0 的新特性和工具。这次的 5.0 版本包括 J2SE 兼容性、 VMTI 、锁和线程改进、稳定性提高,以及动态垃圾收集器。这些新工具和工具改进还包括了一个扩展的 java.lang.management API 、已改进的 JRockit Runtime Analyzer 、新工具 jrcmd ,以及 perfmon 集成。
JRockit 5.0 在开发和生产期间可以免费使用。可以从 dev2dev 中 下载 。要获得支持许可证,请联系您的本地 BEA 销售 代表 。
发行计划
表 1 显示了针对最近发行版本和即将发行的 JRockit 5.0 服务包的发行计划。本文讨论的发行版是独立的主发行版 JRockit 5.0 ,在图 1 中称为 1.5.0 。

图 1 JRockit 的发行计划
支持平台
JRockit 支持很多平台。例如, JRockit 5.0 的 32 位版本就完整支持 Microsoft Windows 2000 、 Microsoft Windows Server 2003 、 Red Hat Enterprise Linux 3.0AS&ES (选用版本),以及 SuSE Linux Enterprise Server 9.0 。 64 位版本则完整支持诸如 Microsoft Windows Server 2003 EE 、 Red Hat Enterprise Linux 3.0 AS & ES ( 选用版本 ) ,以及 SuSE Linux Enterprise Server 9.0 。
在 Linux 方面,其主要优势在于我们已有关于 SuSE Linux 9.0 上的 EM64T 的 64 位 JVM 的技术预览,在 Service Pack 1 的独立发行版中, JRockit 会完整支持 Red Hat Enterprise Linux 4.0 和 SuSE 9.0 。
你可以从 JRockit 站点下载技术预览版本。
查看文档资料获得有关平台支持的完整信息。
JRockit 5.0的开发主题
JRockit 开发总是与许多开发主题联系在一起。在这次的 JRocket 5.0 开发中,我们又对这些主题进行了一些扩展:
- 性能——我们已经将 稳定性 加入这一主题。 性能 和 稳定性 主题是指在特定硬件和操作系统的最佳性能下进行操作的能力,以及依赖于 JVM 稳定性的能力。
- 简单性——我们已经将 有效性 加入了这一主题。 简单性和有效性 主题是指在无需配置和调整 JVM 的情况下快速启动和运行 Java 应用程序的能力。
- 生产率和可管理性——这一主题是指快速开发和运行 Java 语言应用程序的能力。它借助于监控、分析和可管理工具以及 JVM 特性,具有更好的洞察力和灵活性。
本文后续部分介绍了 JRockit 5.0 是如何提供这些功能的。
性能和稳定性
在性能和稳定性方面大大增强。以下部分简要概括了这些增强方面。
Linux 上的性能改进
在 Linux 平台上(参见图 1 ),相对于 1.4.2 SP3 发行版而言,性能提升了 5~10% 。
图 2 展示了在 SPECjbb2000 上 JRockit 5.0 与最早期的主要发行版相比较的相对性能。 JRockit 的缺省配置已经可用于 SuSE 9.0 和 RHAS 3.0 平台。
图 2 SPECjbb2000 上 JRockit 5.0 与最早期的主要发行版的比较
在未来的 JRockit 5.0 SP1 中,性能将会得到进一步改进。
更有效的引用处理
JRockit 5.0 中已经实现了更有效的引用处理,这带来了更好的稳定性和更强的引用处理性能。具体改进如下:
- 指向同一对象的软引用要么全部被清除,要么全部被保存。
- 指向同一对象的虚引用可同时挂起。
- 现在可以根据垃圾收集后存储器的自由空间大小来清除软引用。而在此之前,这要取决于继续存在的垃圾收集数量。
- 带有已修改终结函数( finalizer )的对象现在以一种改进方式来处理,很有可能由终结函数移除一些最常见的问题。
- 引用对象在堆中内部链接起来;因此,本机内存很少消耗在引用上。
明确定义的内存匮乏情况
JRockit 处理内存匮乏( out-of-memory , OOM )情况的方式现在已明确定义并记录在文档中。文档包括有关 JRockit 如何抛出 OOM 异常的详细情况和动机,以及当系统接近 OOM 状态时应采取的措施。总之,当应用程序试图分配对象但堆已满而无法再扩大时, JRockit 能够也应该抛弃 OOM 异常。
当以下情况发生时则表明堆已满:
- 堆中没有软引用对象。
- 堆完全满了。
- 垃圾收集后堆的可用 存储器的最大块要比将要分配的对象更小。
当以下任一种情况发生时,堆无法再增大了:
- 最大堆尺寸 (-Xmx) 已被明确设定,并且堆尺寸已经达到 -Xmx 。
- 堆尺寸已由管理 API 锁定。
- 最大堆尺寸 (-Xmx) 没有被明确设定,但提高堆尺寸可能会导致分页。
并行新一代空间收集
在新一代空间的垃圾收集过程中,主机上的所有 CPU 都被使用,这类似于执行并行老一代空间收集。为了获得更有效的垃圾收集,使用所有可用 CPU 是很危险的,因为它导致用于新一代空间收集的暂停时间更短。
线程稳定性的提高
启动和结束线程的行为更加类似于 HotSpot 的行为。例如,在任何情况下, Thread.isAlive() 和线程状态值现在返回与 HotSpot 完全相同的值。这在以前的发行版中是没有的。
更多的线程分析信息现在也可通过 java.lang.Thread API 使用,这是一个新的 JVMTI 接口,也是管理控制台。
锁的改进
主要的内部重写功能有助于把一些潜在死锁和更少数量的竞争条件分离出来,并且可能提供 JVMTI 支持。
随着 JVMTI 的引入,现在可以得到新的改进分析信息。锁分析信息则可通过 JRA 和 ctrl-break 处理程序获得。
在睡眠之前,胖锁( fat lock )现在使用自旋锁;也就是说,睡眠之前自旋锁的数量在运行期自适应调整。
现在已经支持胖锁收缩。去掉了一些没有竞争力的锁之后,胖锁现在可以收缩至瘦锁。
稳定性的全面提升
许多稳定性提升来自于主要代码重构以及改进的测试例程和测试环境。这使得 JRockit 的稳定性得到了一些提升,这包括:
- 更好地处理 低内存状态
- 更易维护和更通用的代码
- 更好的代码抽象
简单性和有效性
本部分考察了 JRockit 5.0 在无需配置和调整 JVM 的情况下便可快速启动和运行 Java 应用程序这一能力。
J2SE 5.0 的兼容性
JRockit 5.0 是兼容 J2SE 5.0 的。要获取详细描述,请查看 J2SE 5.0 发行版文档 。
动态垃圾收集器
在 JRockit 5.0 中,动态垃圾收集器是启动 JRockit ( 服务器模式 ) 时的默认值。这意味着 JRockit 会在不同的垃圾收集模式中切换,但这要取决于应用程序的运行状态和需要。
除了幕后算法的变化, nursery 的大小 (-Xns) 现已由动态收集器设定,这才是主要变化。也就是说,如果没有明确指定 -Xns ,动态垃圾收集器会自动调节 nursery 的大小。启动选项 -Xns 重新定义自动改变 nursery 大小的能力。
动态垃圾收集器为获得最大吞吐量而尝试进行优化。如果你想针对暂停进行优化,可以使用 -Xgcprio:pausetime 选项。
新的启动选项: -XpauseTarget
如果你想知道应用程序可以接受的垃圾收集暂停时间的最大长度,可以使用新的启动选项 - XpauseTarget 来明确指定暂停目标。 JRockit 会尝试将吞吐量最大化,但要在指定目标内保持垃圾收集暂停。需注意的是,此目标是一个“软目标”,这意味着 JRockit 会尽可能保持所有暂停时间接近目标。
例如,如果知道应用程序将处理 200ms 暂停时间内的压力,可以通过以下方式指定启动命令行上的选项:
java -XpauseTarget=200ms MyApplication
动态压缩
通过 JRockit 5.0 中 新的压缩试探功能, JRockit 已达到了更为平稳的暂停时间状态。这项改进还导致内存对于少量工作来说,可以释放更大的空闲块,这表明 Java 应用程序将会减少中断次数。
生产率和可管理性
最后的改进在于生产率和可管理性。 JRockit 已有许多工具可用于监控和调整 JVM 。以下部分说明了这方面是如何扩展的。
JMX
目前,管理控制台是一个 JMX 客户机,也就是说,管理控制台使用 JMX 标准与管理服务器进行通信。与前面的方式一样,管理服务器或 JMX 代理也是通过在命令行上设定启动选项 -Xmanagement 来完成启动的。
要获得如何使用管理控制台的更多知识,请参考管理控制台文档 。
经过扩展的 java.lang.management
我们已通过创建 JRockit-specific MXBean 界面扩展了 java.lang.management API 。你只需实现任一界面即可通过信息通道访问分析数据,该信息通道是直接连接到 JRockit 的。
在其他事物中, JRockitConsoleMXBean 包括运行过程中改变垃圾收集策略的方法。还可以调用 ctrl-break 处理程序或者记录 JRA 。
MethodProfilerMXBean 包括了方法分析调整和启用异常统计的方法。
ThreadMxBean 允许线程堆栈转储。
这允许你更好地控制 JVM 。
JVMTI
JVMTI ( JRockit 5.0 中的工具界面)是先前调试界面 JVMDI 和分析界面 JVMPI 的整合。 JVMTI 实现提供了更多的分析资料,并提供了一个更为清楚的界面。除了可以成功启用 JVMTI ,我们还可以生成代码,这样一来,调试 / 分析界面就会减少入侵的可能。
新数据的持久处理
管理控制台现在包含一个新的分析数据持久处理系统。已收集的数据现在保存在一个逗号分隔的文本文件中,而并非像以前一样保存在一个二进位文件中。这可以帮助你使用各种工具(包括电子表格)更容易地分析已收集的数据。
JRockit 运行时分析器的改进
JRockit 运行库分析器( JRockit Runtime Analyzer , JPA )现可以在垃圾收集纪录和调用跟踪采样中任选一项,也可两者都选择。外观已经更新如图 2 所示。总体 GUI 改进也已包含在其中,提供了一些更明确的有关样例和调用跟踪数量的信息。
图 3. 垃圾收集的 JRA 屏幕快照
可以使用管理控制台中的插件菜单下的纪录选项来开始纪录,该功能在开发者模式下可用。还可以使用命令行选项。可以通过使用以下命令行启动 JRockit 运行时分析器来查看纪录:
java -jar RuntimeAnalyzer.jar
要获得详细的使用说明,请查阅特定于 JRA 的文档 。 JRockit 运行时分析器在开发和生产过程中可以免费使用。可以从 dev2dev下载GUI (图形用户界面)。
perfmon 集成
permon 是一款 Microsoft Windows 平台监控工具,它已经集成在 JRockit 中。 JRockit 现在可以提供分析数据,这些分析数据可在 perfmon 中显示(参见图 3 ),如果想要监控其他与 JRockit 同时运行的进程,这是很有帮助的。
作为 Windows 平台上唯一可用的监控工具, perfmon 是此平台的一部分,所以你可以轻松地通过键入 perfmon 从任何命令窗口运行它。
图 4 是 perfmon 在观察处理器计数器“ % User Time ”和 JRockit 特定的性能计数器“ Heap Size ” 和“ Used Heap After GC ”时的屏幕快照。很明显,应用程序正在不断地增加内存使用,促使堆持续增长,这样便影响了处理器上用户时间的百分比。
图 4.perfmon 屏幕快照
在使用 JRockit 工具之前,必须安装 JRockit 特定的性能计数器。安装程序是和 JRockit 一起打包的,可以在 JDK 中找到。目前还没有可用的使用文档。
新工具: jrcmd
一种称为 jrcmd 的新工具已专门针对 JRockit5.0 开发出来。这种工具可以传送命令给一个正在运行的 JRocket 实例,而无需重新启动 JRockit 进程。使用这个工具甚至不必指定任何具体启动选项。例如,运行期间可以启动一次 JRA 纪录或提取堆信息。
可以在 JDK 安装程序中找到这项工具。若要找到有关这一工具的更多信息,可以使用帮助选项( jrcmd-h) 。
结束语
本文总体概述了 JRockit5.0 的新功能和工具方面的改进。基于 JRockit 的开发指导主题,在 JRockit5.0 发行版本中,我们提供了一组功能,在本文中我们介绍了其中几项。
JRockit5.0 是目前最稳定的版本,我们也相信,您会注意到这些不同点以及新功能和工具的增量价值。经过多项工具的试验, JRockit 已可以监控或分析 Java 应用程序。这些工具将帮助您找到弱点,从而提高应用程序的性能。请通过我们的 新闻组 提供反馈和意见,以便我们进一步改进。
参考资料
原文出处
http://dev2dev.bea.com/products/wljrockit50/articles/jrockit5_new_features.jsp
| 作者简介 |
|
Eva Andreasson于 2002 年获得了瑞士斯德哥尔皇家技术学院的硕士学位,在校主攻自动化系统。毕业后,她成为 BEA 公司 JRockit 开发团队中的一员。她主要研究动态垃圾收集器,她计划未来将针对 SSI 系统开发分布式垃圾收集器。 |
作者其它文章
|