java - 使用 JVMTI 进行线程感知堆分配跟踪

标签 java jvmti

编写分析我也会实现堆分析的典型任务。具体我想跟踪一下,哪个线程分配了多少数据?使用 JVMTI,我认为 Hook 到事件 VM Object AllocationObject Free 就足够了。遗憾的是,我读到第一个事件未触发是由于对 new 的调用.

我最后的想法是检查事件 MethodExit 是否名称为 <init>从而将此调用声明为对象分配。但是,在此事件中我无法获取对象,因此无法调用 GetObjectSize .

简单地遍历堆,不包含关于哪个对象被哪个线程分配的信息。有谁知道如何实现这个?

最佳答案

快速浏览一下 Hotspot VM (templateTable_x86_64.cpp) 的 _new 实现似乎表明,_new 没有为 JVMTI 提供任何 Hook (即使在看起来很慢的情况下也是如此)。因此,如果您的技巧不起作用,我看不到任何其他可能性 - 但我绝不是 JVMTI 专家。

我假设用一个小补丁编译您自己的 Hotspot VM 对您不是特别有用吗?

关于java - 使用 JVMTI 进行线程感知堆分配跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6365925/

相关文章:

java - INSERT INTO 在 Ucanaccess 中给出错误

java - 使用可视化 GUI 编辑器对学习 GUI 设计有害吗?

java - 运行 JUnit 测试后所做的数据库更改不可见

javascript - 配置文件 Nashorn Javascript 执行?

java - 具有原始类型的 JNI GetObjectClass

java - 如何捕获java程序中的读取和写入?

java - Java中jqGrid-jQuery的外部分页

java - 退出无限循环需要什么条件?

crash - linux 上的 jvmti 代理 fatal error : C [libc. so.6+0x7ae68] strcpy+0x18

Java 附加 API : UnsatisfiedLinkError