您的位置:首页 > 运维架构 > 网站架构

JPDA 架构研究14 - Agent利用环境指针访问VM(对象管理篇)

2014-12-09 11:46 302 查看
引入:
上文讨论了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)等待被这个监视器通知到的线程列表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JDWP JPDA JVMTI