我正在查看 JVMTI API(http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html),以便在给定状态下获取当前堆。
为了做到这一点,我想使用 FollowReferences ( http://docs.oracle.com/javase/6/docs/platform/jvmti/jvmti.html#FollowReferences ) 方法,该方法将指向 jvmtiHeapCallbacks 的指针作为参数结构,它定义了几个回调,尤其是堆引用回调。
此回调必须采用以下形式:
typedef jint (JNICALL *jvmtiHeapReferenceCallback)
(jvmtiHeapReferenceKind reference_kind,
const jvmtiHeapReferenceInfo* reference_info,
jlong class_tag,
jlong referrer_class_tag,
jlong size,
jlong* tag_ptr,
jlong* referrer_tag_ptr,
jint length,
void* user_data);
我不明白如何使用 class_tag?在 API 中,我找不到将 class_tag 转换为 jclass 的函数。我查看了几个示例,但无法使用 class_tag。
在 API 中,有一个 SetTag 和 GetTag 函数,但它们似乎是针对 jobject 而不是针对 jclass。