JEP 240:移除 JVM TI hprof 代理
概述
从 JDK 中移除 hprof
代理。
非目标
创建 hprof
格式的堆转储文件的能力将会保留。
动机
hprof
代理的有用功能已经被更好的替代方案所取代。
堆转储 (heap=dump)
此功能已经被 JVM 中的相同功能所取代。通过使用诊断命令 GC.heap_dump
(jcmd <pid> GC.heap_dump
),可以要求 JVM 以 hprof
文件格式转储堆内存(此功能同样可以通过 jmap -dump
实现)。
分配分析器(堆=sites)
Java VisualVM 工具提供了相同的功能,许多第三方分析器也提供了相同的功能。
CPU 分析器 (cpu=samples, cpu=times)
CPU 分析器有一些缺点,在 http://www.brendangregg.com/blog/2014-06-09/java-cpu-sampling-using-hprof.html 和其他地方有详细描述。还有其他一些工具能够提供更好的功能且问题较少。其中就包括与 JDK 捆绑在一起的 Java VisualVM 和 Java Flight Recorder,以及许多第三方分析器。
示例代码
hprof
代理程序是作为 JVM 工具接口 的演示代码编写的,并不打算成为生产工具。其代码和文档中包含许多如下形式的声明:
这是 JVM TI 接口和 BCI 使用的演示代码,它不是官方产品,也不是 JDK 的正式组成部分。
描述
停止将 hprof
代理库 (libhprof.so
) 作为 JDK 的一部分进行构建和发布。
将代码移到 OpenJDK 下的一个独立项目中。该代码作为 JVM TI 功能的演示仍然具有价值,但并未达到发布产品的要求。
该更改应该在相应的发行说明中进行记录。考虑到文档中已经存在大量的免责声明,用户应该不会对 hprof
的移除感到意外,但文档应更新为指向替代工具。
测试
现有的 hprof
代理测试将需要被移除。