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

各种各样的诊断和监视工具可以用来评估垃圾收集性能。本章简要概述他们中的几个。可以通过第九章中的“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文档的链接。

【摘录】JAVA内存管理-评估垃圾收集性能的工具的更多相关文章

  1. 【摘录】JAVA内存管理-JVM垃圾收集机制

    很多公司都有自己的JVM实现,被Oracle收购的sun公司开发的JVM实现名为HotSpot.这一实现是我们最常用到的. 还有哪些JVM实现呢?比较有名的有Oracle之前收购的BEA公司(就是以前 ...

  2. 【摘录】JAVA内存管理-有关垃圾收集的关键参数

    第八章 有关垃圾收集的关键参数 一些命令行参数可以用来选择垃圾收集器,指定堆或代的大小,修改垃圾收集行为,获取垃圾收集统计数据.本章给出一些最常用的参数.有关各种各样参数更多完整的列表和详细信息可以参 ...

  3. 【摘录】JAVA内存管理-自动选择垃圾收集器算法

    在J2SE 5.0,垃圾收集的默认值:垃圾收集器.堆大小以及JVM的类型(客户端还是服务器)都会根据应用运行的硬件平台和操作系统自动选择.相比之前设置命令行参数的方式,自动选择很好的匹配了不同类型的应 ...

  4. java 内存管理 —— 《Hotspot内存管理白皮书》

    说明   要学习Java或者任意一门技术,我觉得最好的是从官网的资料开始学习.官网所给出的资料总是最权威最知道来龙去脉的.而Java中间,垃圾回收与内存管理是Java中非常重要的一部分.<Hot ...

  5. Java 内存管理

    java 内存管理机制 JAVA 内存管理总结 java 是如何管理内存的 Java 的内存管理就是对象的分配和释放问题.(两部分) 分配 :内存的分配是由程序完成的,程序员需要通过关键字 new 为 ...

  6. java内存管理机制

    JAVA 内存管理总结 1. java是如何管理内存的 Java的内存管理就是对象的分配和释放问题.(两部分) 分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 ( ...

  7. java内存管理(堆、栈、方法区)

    java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...

  8. Java内存管理-一文掌握虚拟机创建对象的秘密(九)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! [福利]JVM系列学习资源无套路赠送 回顾一下: 本文是接着上一篇内容:Java内存管 ...

  9. Java内存管理笔记

    java内存管理机制 在java中,内存管理由JVM完全负责,java中的"垃圾回收器"负责自动回收无用对象占据的内存资源,这样可以大大减少程序猿在内存管理上花费的时间,可以更集中 ...

随机推荐

  1. Memory management in RxSwift – DisposeBag

    I’ve noticed a lot of beginners in RxSwift ask about DisposeBag. DisposeBag isn’t a standard thing i ...

  2. ZBrush细说3D海盗角色的创建艺术

    一提到海盗,就不由自主想到了<加勒比海盗>,那个帅得一塌糊涂的杰克船长更是让人夜不能寐寝难安,但在艺术的世界里,角色无美丑,今天我们要讲的这位海盗,就与“帅气”八竿子打不着了,它甚至有点古 ...

  3. MongoDB 学习笔记(二):shell中执行增删查改

    一.查 1.查询集合中所有文档:db.集合名.find(). 2.查询集合中第一个文档:db.集合名.findOne(). 3.指定查询条件:第一个参数就是指定查询条件 查询全部文档:db.集合名.f ...

  4. RHEL 7 & CentOS 7禁用IPV6(转载)

    RHEL 7 & CentOS 7下禁用IPV6的方法和之前的版本不太一样了,本文整理了一下处理方法: 首先,我们必须给出最根本的解决方法:修改grub,在引导时就不加载IPV6模块 这样修改 ...

  5. 【转】ROI Pooling

    Faster rcnn的整体构架: 训练的大致过程: 1.图片先缩放到MxN的尺寸,之后进入vgg16后得到(W/16,H/16)大小的feature map: 2.对于得到的大小为(W/16,H/1 ...

  6. 路飞学城Python-Day153

    Scrapy核心组件

  7. IDEA热部署配置

    一.IDEA热加载的作用: 热加载的作用就是当你保存修改,新增,删除代码或者文件后,不需要重新启动项目,直接就能运行. 二.IDEA热记载的配置方法 1.配置pom文件,加载依赖 Maven. < ...

  8. 为什么在JavaScript中0.1+0.2不等于0.3?

    0.1+0.2不等于0.3?是不是有点颠覆你的认知,但是,在js中,是真实存在的! console.log(0.1+0.2); // 0.30000000000000004 其实这都是因为浮点数运算的 ...

  9. POJ2406A- Power Strings

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...

  10. leetCode笔记--binary tree

    993. Cousins in Binary Tree In a binary tree, the root node is at depth 0, and children of each dept ...