首页 > 其他 > 详细

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

时间:2014-12-09 15:55:30      阅读:285      评论:0      收藏:0      [点我收藏+]

引入:

上文讨论了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(对象管理篇)

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!