簡體   English   中英

如何知道一個類是否已經初始化?

[英]How to know whether a class has been initialized or not?

使用CustomClassloader或Java代理+ Instrumentation API來獲取JVM加載的所有類都非常簡單明了。 但是,似乎很難獲得已初始化的類的列表。 (我實際上想知道是否有任何方法可以得到它)

那么,有沒有辦法知道一個類是否已經初始化?

- 提前致謝

我不確定Instrumentation API,但一種可能的方法是使用JVMTI GetClassStatus函數。

使用工具界面,您可以獲得由JVM加載的所有類,並找出那些沒有JVMTI_CLASS_STATUS_INITIALIZED狀態標志的類

JavaVM *jvm;
jvmtiEnv *jvmti;
jvmtiError err;

env->GetJavaVM(&jvm);
jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_2);

jint classCount = 0;
jclass * classes;

jvmti->GetLoadedClasses(&classCount, &classes);
for (int i = 0; i < classCount; i++) {
    jint classStatus = 0;
    jvmti->GetClassStatus(classes[i], &classStatus);

    if (classStatus != JVMTI_CLASS_STATUS_PRIMITIVE
        && classStatus != JVMTI_CLASS_STATUS_ARRAY
        && classStatus != JVMTI_CLASS_STATUS_ERROR
        && !(classStatus & JVMTI_CLASS_STATUS_INITIALIZED)) {
        // static initializer is not finished yet
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM