【摘录】JAVA内存管理-评估垃圾收集性能的工具

第七章 评估垃圾收集性能工具

各种各样的诊断和监视工具可以用来评估垃圾收集性能。本章简要概述他们中的几个。可以通过第九章中的“Tools and Troubleshooting”链接获得更多的信息。

命令行参数 –XX:+PrintGCDetails

获取垃圾收集初始信息最简单的方法之一是指定这个命令行参数 –XX:+PrintGCDetails。对于每一次收集,形如这样的信息都会在输出的结果中:垃圾收集前后每个不同代活动对象的大小,每个代可用的空间以及垃圾收集消耗的时间。

命令行参数 –XX:+PrintGCTimeStamps

当使用了–XX:+PrintGCDetails参数后,除了上述输出外,这个参数在每次垃圾收集开始时输出一个时间戳。时间戳有助于帮助你将垃圾收集日志与其他日志时间关联起来。

jmap

jmap 是一个包含在Solaris™操作系统环境Linux(但不支持Windows)的JDK中的工具(译注:这篇文章说的JDK5时代,在JDK6的Windows版本中已经支持了)。这个工具打印关于一个运行着的JVM或core文件内存相关的统计信息。当没有附加任何命令参数时,它打印加载的共享对象列表,很接近Solaris系统中pmap工具的输出。对于更具体的信息,这些参数可以使用:-heap、-histo和–permstat。

-heap用于获取如下信息:垃圾收集器的名称、具体算法的细节(例如并行垃圾收集的线程数)、堆的配置信息、堆的使用信息的摘要。

-histo用于获取关于类的堆的直方图。对于每个类,打印其在堆中实例的个数,这些对象消耗的内存总量的字节数和类的全限定名。直方图对于了解堆是如何使用的非常有用。

对于动态产生和加载大量类的应用(例如JSPweb容器)来说配置持久代的大小非常重要。如果应用加载了“太多”的类将发生OutOfMemoryError错误。jmap 的 –permstat 参数可以用来获取持久代对象的统计信息。

jstat

jstat 使用HotSpot JVM内建的方式提供运行中的应用的性能和资源消耗信息。但诊断性能问题时可以使用这个工具,特别是当问题与堆大小和垃圾收集相关时。它的许多选项能够打印垃圾收集行为和性能的统计数据和各代的用量。

HPROF: 堆分析器

HPROF是JDK5.0提供的一个简单的分析器代理。它是一个使用JVM TI接口链接到JVM的动态链接库。它使用ASCII和二进制格式输出特征信息到文件或socket。这些信息未来可以用前端工具分析。

HPROF能够呈现CPU使用率、堆分配统计和锁争用特征。另外,它可以输出完整的heap dump并且报告JVM中所有线程和锁的状态。当分析性能、锁争用、内存泄露等问题时,HPROF非常有用。参见第九章HPROF文档的链接。

HAT: 堆分析工具(Heap Analysis Tool)

堆分析工具(HAT)帮助分析无意识的对象持有(unintentional object retention)。这个术语是用来描述一个对象不再需要,但由于存在某个活动对象到它的引用路径仍然存活。HAT基于HPROF产生的堆快照提供了一个非常方便的方法浏览对象拓扑。这个工具支持很多查询,包括“显示所有从根集合到这个对象的引用路径”。参见第九章HAT文档的链接。

你可能感兴趣的:(java内存管理)