JPDA 架构研究14 - Agent利用环境指针访问VM(对象管理篇)
2014-12-09 11:46
302 查看
引入:
上文讨论了Agent如何利用环境指针访问VM(管理类),这里讨论如何管理对象。
分类9:对象管理
a.GetObjectSize. 获取对象的大小,
b.GetObjectHashCode.获取对象的hash值。
c.GetObjectMonitorUsage.获取对象的监视器。
(1)监视器所在的线程
(2)线程进入该监视器的次数
(3)等待拥有这个监视器的线程数。
(4)等待拥有这个监视器的线程列表。
(5)等待被这个监视器通知到的线程数。
(6)等待被这个监视器通知到的线程列表。
上文讨论了Agent如何利用环境指针访问VM(管理类),这里讨论如何管理对象。
分类9:对象管理
a.GetObjectSize. 获取对象的大小,
jvmtiError GetObjectSize(jvmtiEnv* env, jobject object, jlong* size_ptr)注意,这不是真实大小,这只是从对象的定义代码中获得的一个预估值。
b.GetObjectHashCode.获取对象的hash值。
jvmtiError GetObjectHashCode(jvmtiEnv* env, jobject object, jint* hash_code_ptr)
c.GetObjectMonitorUsage.获取对象的监视器。
typedef struct { jthread owner; jint entry_count; jint waiter_count; jthread* waiters; jint notify_waiter_count; jthread* notify_waiters; } jvmtiMonitorUsage;
jvmtiError GetObjectMonitorUsage(jvmtiEnv* env, jobject object, jvmtiMonitorUsage* info_ptr)这个方法值得一说,从返回值可以看出,它可以包含对象的监视器的以下信息:
(1)监视器所在的线程
(2)线程进入该监视器的次数
(3)等待拥有这个监视器的线程数。
(4)等待拥有这个监视器的线程列表。
(5)等待被这个监视器通知到的线程数。
(6)等待被这个监视器通知到的线程列表。
相关文章推荐
- JPDA 架构研究8 - Agent利用环境指针访问VM(堆栈管理篇)
- JPDA 架构研究13 - Agent利用环境指针访问VM(类管理篇)
- JPDA 架构研究9 - Agent利用环境指针访问VM (堆管理篇)
- JPDA 架构研究6 - Agent利用环境指针访问VM (线程管理篇)
- JPDA 架构研究10 - Agent利用环境指针访问VM(局部变量管理篇)
- JPDA 架构研究7 - Agent利用环境指针访问VM(线程组管理篇)
- JPDA 架构研究5 - Agent利用环境指针访问VM (内存管理篇)
- JPDA 架构研究15 - Agent利用环境指针访问VM(字段访问篇)
- JPDA 架构研究12 - Agent利用环境指针访问VM(观察字段篇)
- JPDA 架构研究16 - Agent利用环境指针访问VM(方法访问篇)
- JPDA 架构研究11 - Agent利用环境指针访问VM(断点操作篇)
- 利用ADO.NET的体系架构打造通用的数据库访问通用类
- 利用ADO.NET的体系架构打造通用的数据库访问通用类
- C++学习总结_指针访问堆内存中创建的对象
- 基于.NET开发和运行环境,架构校园信息系统[14]
- 利用ADO.NET的体系架构打造通用的数据库访问通用类
- 利用对象、引用、指针调用虚函数
- 利用ADO.NET的体系架构打造通用的数据库访问通用类
- 利用指针访问局部静态变量
- apache -- 利用mod_access通过设置环境变量限制特定用户的访问