gpt4 book ai didi

java - 如何知道一个类是否已经初始化?

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:39 24 4
gpt4 key购买 nike

无论是使用 CustomClassloader 还是 Java agent + Instrumentation API 都可以非常简单直接地获取 JVM 已加载的所有类。然而,已经初始化的类列表似乎并不那么容易获得。 (其实我在想有没有什么办法可以得到)

那么,有什么办法可以知道一个类是否已经初始化了呢?

--提前致谢

最佳答案

我不确定 Instrumentation API,但一种可能的方法是使用 JVMTI GetClassStatus功能。

通过工具接口(interface)可以获取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
}
}

关于java - 如何知道一个类是否已经初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com