引入:jvm
上文中咱们讨论了Agent利用环境指针访问VM的堆栈操做部分,这里咱们讨论堆操做部分。
ide
分类5:堆操做指针
a. GetTag. 获取对象在堆上的惟一标识符(长整型)。对象
jvmtiError GetTag(jvmtiEnv* env, jobject object, jlong* tag_ptr)
b.SetTag.为对象设置堆上的惟一标示符。it
jvmtiError SetTag(jvmtiEnv* env, jobject object, jlong tag)
c.ForceGarbageCollection. 强制VM执行垃圾回收。io
jvmtiError ForceGarbageCollection(jvmtiEnv* env)
该方法只有等垃圾回收作完才返回。class
d.IterateOverObjectsReachableFromObject. 迭代某对象所能直接或者间接引用到的全部对象。object
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)