Использование JNI / JVMTI - Как определить, является ли jfieldID статическим или нет
Если я использую jvmti_env->GetClassFields(objClass, &numOfFields, &fieldIds);
Мне все еще нужно решить, вызывать ли GetStatic
Я нашел обходной путь здесь: http://zoo.cs.yale.edu/classes/cs433/programming/examples-java-socket/jdk1.5/hotspot/src/share/vm/runtime/jfieldIDWorkaround.hpp
Но я предпочитаю решение от JVM.
Спасибо!
1 ответ
Решение
Используйте функцию GetFieldModifiers в JVMTI.
Значения, возвращаемые этой функцией, описаны здесь: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
Так что для статики вы должны проверить вот так:
jint accessFlags
...
(*jvmti)->GetFieldModifiers(jvmti, objClass, fieldIds[i], &accessFlags);
if (accessFlags & 0x0008)
printf("STATIC\n");
else
printf("NOT STATIC\n");