Вызов IterateOverInstancesOfClass застреваетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Вызов IterateOverInstancesOfClass застревает

Сообщение Anonymous »

Я пытаюсь вызвать JVMTI->IterateOverInstancesOfClass из JNI (как здесь), но вызов зависает.
Я пытаюсь найти экземпляр определенного класса для вызова нестатического метода.
Я видел это предложение в документации:

В результате потоки, выполняющие код языка программирования Java, потоки, пытающиеся возобновить выполнение кода языка программирования Java, и потоки, пытающиеся выполнить функции JNI, обычно останавливаются.

Что касается этого предложения, я выполнил его в собственный поток, который я создал в процессе JVM. Я думаю, что это может иметь некоторый эффект (возможно, мой поток застопорился, потому что это не обычный поток JVM).
Кто-нибудь знает, почему это могло произойти? Как это решить? Знакомы ли вы с другим методом вызова метода в конкретном экземпляре класса?
Концептуально это мой код:

Код: Выделить всё

// 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);
Я пытался подключить поток как демон и отключить его перед вызовом IterateOverInstancesOfClass. Ничего не помогло :(

Подробнее здесь: https://stackoverflow.com/questions/793 ... ting-stuck
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»