为什么未在所有类上触发JVMTi ClassPrepared回调

时间:2018-12-30 10:09:58

标签: java class classloader jvmti

为什么不是对所有类都触发JVMTi ClassPrepared回调?

例如,我调用java.lang.System.load(),但是类java.lang.System不会触发回调。

正如在文档中所写:

  

完成类准备后,将生成类准备事件。   ...不会为原始类生成类准备事件(对于   例如java.lang.Integer.TYPE)。

但是System类不是原始类。

这是我的Agent_OnLoad方法:

JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {
    jvmtiEnv *jvmti;
    if (vm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_2) != JNI_OK)
        ExitProcess(2);
    jvmtiEventCallbacks callbacks = {0};

    callbacks.ClassPrepare = ClassPrepare;

    jvmti->SetEventCallbacks(&callbacks, sizeof(callbacks));

    jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE, NULL);

    return JNI_OK;
}

0 个答案:

没有答案