BEA WebLogic JRockit 8.1 Beta 使用本章中描述的工具来促进分析和调试 JVM 实现。本节包括有关以下主题的信息:
JVMPI
JVMDI
JVMPI
警告: 此接口是 Java 2 SDK 中的实验性功能,还不是标准的分析接口。
JVM 探查器接口 (JVMPI) 是 Java 虚拟机和进程内探查器代理之间的双向函数调用接口。一方面,虚拟机向分析器代理通知各种事件,例如,对应于堆分配、线程启动等。另一方面,分析器代理通过JVMPI发出控制和请求更多信息。例如,分析器代理可以根据分析器前端的需要打开/关闭特定事件通知。
探查器前端可能会或可能不会与探查器代理在同一进程中运行。它可能驻留在同一台机器上的不同进程中,或者位于通过网络连接的远程机器上。JVMPI 没有指定标准的有线协议。工具供应商可能会设计适合不同分析器前端需求的有线协议。
基于 JVMPI 的 profiling 工具可以获取大量内存分配站点、CPU 使用热点、不必要的对象保留和监视器争用等各种信息,以进行全面的性能分析。
JVMPI 支持部分分析,即用户可以在虚拟机启动时间的某些子集内选择性地分析应用程序,也可以选择仅获取某些类型的分析信息。
在当前版本的 JVMPI 中,每个虚拟机只能支持一个代理。
更改 JVMPI 默认行为
-Xjvmpi[<参数>=<值>, ...]
当 JRockit 在附加调试器的情况下运行时,默认情况下会启用许多可能会产生大量开销的事件。由于 JVMPI 不需要发送所有这些事件,您可以通过设置-Xjvmpi标志来禁用它们。使用表 9-1中列出的参数来修改默认行为:
表 9-1 -Xjvmpi的命令行参数
争论 | 描述 |
---|---|
entryexit=off|on (默认开启) |
将此设置为off将禁用 JVMPI 发送的以下方法进入和退出事件: JVMPI_EVENT_METHOD_ENTRY JVMPI_EVENT_METHOD_ENTRY2 JVMPI_EVENT_METHOD_EXIT |
allocs=off|on(默认开启) |
将此设置为off将禁用这些对象分配和空闲事件: JVMPI_EVENT_OBJECT_ALLOC JVMPI_EVENT_OBJECT_MOVE JVMPI_EVENT_OBJECT_FREE JVMPI_EVENT_ARENA_NEW JVMPI_EVENT_ARENA_DELETE |
监视器=关闭|开启(默认开启) |
将此设置为关闭禁用这些监视器争用事件: JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT JVMPI_EVENT_MONITOR_CONTENDED_ENTER JVMPI_EVENT_MONITOR_CONTENDED_ENTERED JVMPI_EVENT_MONITOR_CONTENDED_EXIT JVMPI_EVENT_MONITOR_WAIT JVMPI_EVENT_MONITOR_WAITED |
arenadelete=off|on (默认关闭) |
将此设置为on将启用JVMPI_EVENT_ARENA_DELETE事件。默认情况下会抑制此事件以与不发送此事件的 Sun 的 VM 兼容。如果分析器希望接收事件,则可以启用该事件。 |
JVM 调试接口 (JVMDI) 是调试器和其他编程工具使用的低级调试接口。它允许您检查状态并控制在 JRockit 中运行的应用程序的执行。
JVMDI 的工作原理
JVMDI 是一个双向接口。可以通过事件通知 JVMDI 客户端感兴趣的事件。JVMDI 可以通过许多不同的功能来查询和控制应用程序,无论是响应事件还是独立于事件。
JVMDI 客户端与正在调试的应用程序在同一虚拟机中运行,并通过本机接口访问 JVMDI。原生的进程内接口允许最大程度地控制调试工具的干扰。通常,JVMDI 客户端相对紧凑。它们可以由一个单独的进程控制,该进程实现调试器的大部分功能,而不会干扰目标应用程序的正常执行。
JVMDI 是 Java 平台调试器架构中的一层。此体系结构还包含更高级别的进程外调试器接口。对于许多调试器工具,高级接口比 JVMDI 更合适。如果您想了解更多相关知识,不妨来关注一下极悦的Java虚拟机视频,里面的课程内容更加详细,即使没有基础的也可以听懂,希望对大家的学习能够有所帮助哦。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习