码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-12-09 15:56:46      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:jdwp   jpda   jvmti   

引入:

上文讨论了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)等待被这个监视器通知到的线程列表。

本文出自 “平行线的凝聚” 博客,请务必保留此出处http://supercharles888.blog.51cto.com/609344/1587822

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

标签:jdwp   jpda   jvmti   

原文地址:http://supercharles888.blog.51cto.com/609344/1587822

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!