diff --git a/arthas-vmtool/src/main/java/arthas/VmTool.java b/arthas-vmtool/src/main/java/arthas/VmTool.java index d530a06d5..aaed0dc20 100644 --- a/arthas-vmtool/src/main/java/arthas/VmTool.java +++ b/arthas-vmtool/src/main/java/arthas/VmTool.java @@ -65,15 +65,10 @@ public class VmTool implements VmToolMXBean { /** * 获取所有已加载的类 + * @param klass 这个参数必须是 Class.class + * @return */ - private static native Class[] getAllLoadedClasses0(); - - /** - * 包括小类型(如int) - */ - public static Class[] getAllClasses() { - return getInstances0(Class.class); - } + private static native Class[] getAllLoadedClasses0(Class klass); @Override public String check() { @@ -107,7 +102,7 @@ public class VmTool implements VmToolMXBean { @Override public Class[] getAllLoadedClasses() { - return getAllLoadedClasses0(); + return getAllLoadedClasses0(Class.class); } } diff --git a/arthas-vmtool/src/main/native/src/jni-library.cpp b/arthas-vmtool/src/main/native/src/jni-library.cpp index 7ffa8c9e3..1f358d9d7 100644 --- a/arthas-vmtool/src/main/native/src/jni-library.cpp +++ b/arthas-vmtool/src/main/native/src/jni-library.cpp @@ -4,21 +4,6 @@ #include #include "arthas_VmTool.h" // under target/native/javah/ -//缓存 -static jclass cachedClass = NULL; - -extern "C" -JNIEXPORT jclass JNICALL getClass(JNIEnv *env) { - if (cachedClass == NULL) { - //通过其签名找到Class的Class - jclass theClass = env->FindClass("java/lang/Class"); - //放入缓存 - cachedClass = static_cast(env->NewGlobalRef(theClass)); - env->DeleteLocalRef(theClass); - } - return cachedClass; -} - extern "C" jvmtiEnv *getJvmtiEnv(JNIEnv *env) { @@ -194,7 +179,7 @@ Java_arthas_VmTool_countInstances0(JNIEnv *env, jclass thisClass, jclass klass) extern "C" JNIEXPORT jobjectArray JNICALL Java_arthas_VmTool_getAllLoadedClasses0 - (JNIEnv *env, jclass thisClass) { + (JNIEnv *env, jclass thisClass, jclass kclass) { jvmtiEnv *jvmti = getJvmtiEnv(env); @@ -207,7 +192,7 @@ JNIEXPORT jobjectArray JNICALL Java_arthas_VmTool_getAllLoadedClasses0 return JNI_FALSE; } - jobjectArray array = env->NewObjectArray(count, getClass(env), NULL); + jobjectArray array = env->NewObjectArray(count, kclass, NULL); //添加元素到数组 for (int i = 0; i < count; i++) { env->SetObjectArrayElement(array, i, classes[i]);