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

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

2014-12-08 22:54 591 查看
引入:
上文中我们讨论了Agent利用环境指针访问VM的堆栈操作部分,这里我们讨论堆操作部分。

分类5:堆操作
a. GetTag. 获取对象在堆上的唯一标识符(长整型)。
jvmtiError
GetTag(jvmtiEnv* env,
jobject object,
jlong* tag_ptr)


b.SetTag.为对象设置堆上的唯一标示符。
jvmtiError
SetTag(jvmtiEnv* env,
jobject object,
jlong tag)


c.ForceGarbageCollection. 强制VM执行垃圾回收。
jvmtiError
ForceGarbageCollection(jvmtiEnv* env)
该方法只有等垃圾回收做完才返回。

d.IterateOverObjectsReachableFromObject. 迭代某对象所能直接或者间接引用到的所有对象。
jvmtiError
IterateOverObjectsReachableFromObject(jvmtiEnv* env,
jobject object,
jvmtiObjectReferenceCallback object_reference_callback,
void* user_data)


e.IterateOverReachableObjects.迭代堆上所有可以引用到的对象。
jvmtiError
IterateOverReachableObjects(jvmtiEnv* env,
jvmtiHeapRootCallback heap_root_callback,
jvmtiStackReferenceCallback stack_ref_callback,
jvmtiObjectReferenceCallback object_ref_callback,
void* user_data)


f.IterateOverHeap.迭代堆上的所有对象,包含可以到达的和不可到达的。
jvmtiError
IterateOverHeap(jvmtiEnv* env,
jvmtiHeapObjectFilter object_filter,
jvmtiHeapObjectCallback heap_object_callback,
void* user_data)


g.IterateOverInstancesOfClass.迭代某个给定的类的堆上所有实例。包括可以和不可以到达的。
jvmtiError
IterateOverInstancesOfClass(jvmtiEnv* env,
jclass klass,
jvmtiHeapObjectFilter object_filter,
jvmtiHeapObjectCallback heap_object_callback,
void* user_data)


h.GetObjectsWithTags.获取给定的堆标记的对象列表。
jvmtiError
GetObjectsWithTags(jvmtiEnv* env,
jint tag_count,
const jlong* tags,
jint* count_ptr,
jobject** object_result_ptr,
jlong** tag_result_ptr)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JDWP JPDA