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

各种各样的诊断和监视工具可以用来评估垃圾收集性能。本章简要概述他们中的几个。可以通过第九章中的“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用于获取关于类的堆的直方图。对于每个类,打印其在堆中实例的个数,这些对象消耗的内存总量的字节数和类的全限定名。直方图对于了解堆是如何使用的非常有用。

对于动态产生和加载大量类的应用(例如JSP、web容器)来说配置持久代的大小非常重要。如果应用加载了“太多”的类将发生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文档的链接。

最新文章

  1. Java设计模式之代理模式(Proxy)
  2. userprofile同步用户失败的原因和解决方案
  3. 初识JavaScript,Ajax,jQuery,并比较三者关系
  4. [LintCode] 3Sum 三数之和
  5. 图文详解YUV420数据格式
  6. PHP中我经常容易混淆的三组函数
  7. C# 调试程序弹出 没有可用于当前位置的源代码 对话框
  8. SQL 编译与重编译
  9. 整理网站优化(SEO)的方案
  10. for语句输出图形
  11. 从C++ int类型的变量范围谈起
  12. 如何在苹果笔记本上装win7系统
  13. Windows下Maven3.3.9安装与配置
  14. px转换成bp单位的工具函数
  15. You Only Look Once: Unified, Real-Time Object Detection(翻译)
  16. VS中的类模板
  17. 【题解】 [HNOI2015]菜肴制作 (拓扑排序)
  18. sqlserver的convert函数
  19. HDU 1455 Sticks(经典剪枝)
  20. SPARQL 入门教程

热门文章

  1. 关于Java学习
  2. 01--Qt扫盲篇
  3. bootstrap modal 一闪
  4. mongoDB 介绍(特点、优点、原理)
  5. 设置Pycharm在创建py文件时自动添加文件头注释(类似于钩子特性)
  6. PHP如何判断一个数组是一维的还是二维的
  7. jQuery scrollFix滚动定位插件
  8. Mysql学习总结(36)——Mysql查询优化
  9. 利用redis实现elasticsearch入库去重
  10. BA-siemens-insight_designer不支持win7 64位操作系统