Ich möchte eine finden Instanz einer bestimmten Klasse, um eine nicht statische Methode aufzurufen.
Ich habe diesen Satz in der Dokumentation gesehen:
Infolgedessen führen Threads Java-Programmiersprachencode aus, Threads Der Versuch, die Ausführung von Java-Programmiersprachencode fortzusetzen, und Threads, die versuchen, JNI-Funktionen auszuführen, werden normalerweise blockiert.
Bezüglich dieses Satzes habe ich ihn in a ausgeführt nativer Thread, den ich im JVM-Prozess erstellt habe. Ich denke, es könnte einen Effekt haben (vielleicht ist mein Thread auch blockiert, weil es kein normaler JVM-Thread ist).
Hat jemand eine Idee, warum das passieren könnte? Wie kann man es lösen? Kennen Sie eine andere Methode zum Aufrufen einer Methode für eine bestimmte Instanz einer Klasse?
Konzeptionell ist dies mein Code:
Code: Select all
// Get JVM
int vmCount;
JavaVM* jvm_array[1];
JNI_GetCreatedJavaVMs(jvm_array, 1, &vmCount);
JavaVM* jvm = jvm_array[0];
// AttachThread
JNIEnv* env;
JavaVMAttachArgs args;
args.version = JNI_VERSION_1_2;
args.name = "main";
args.group = NULL;
(*jvm)->AttachCurrentThread(jvm, (void**) &env, &args);
// Get JVMTI
jvmtiEnv* jvmti;
(*jvm)->GetEnv(jvm, (void**) &jvmti, JNI_VERSION_1_2);
// Enable can tag objects
jvmtiCapabilities cap = {0};
cap.can_tag_objects = 1;
(*jvmti)->AddCapabilities(jvmti, &cap);
// Find class using jvmti->GetLoadedClasses
jclass class = ...;
// Iterate over instances in heap
(*jvmti)->IterateOverInstancesOfClass(jvmti, class, JVMTI_HEAP_OBJECT_EITHER, callback, NULL);
