JNI: EnsureLocalCapacity игнорируется

0

я вызываю EnsureLocalCapacity() в каждом вызове собственных методов в самом начале:

void ensureMemory(JNIEnv *env) {
    jint ensureResult = env->EnsureLocalCapacity(MAX_LOCALS_COUNT);
    debug("ensure result for %i is %i", MAX_LOCALS_COUNT, ensureResult);

обеспечить результат для 1024 - 0

env: [0x7fccc60011d0]

и он падает после нескольких вызовов на env->NewObject() (исключение захвачено clang (которое я пытаюсь использовать через clang c-api)):

libclang: обнаружена ошибка при индексировании исходного файла: {
'source_filename': '/Users/asmirnov/Documents/dev/src/clang_jni/mac/test/TestFile.h'
'command_line_args': ['-c', '-x', 'c++'], 'unsaved_files': [],
'options': 0,}

Таким образом, кажется, что предел превышен на 16 локальных лимитов, хотя я назову env->DeleteLocalRef каждый раз, когда мне не нужен локальный var. Что мне делать?

  • 0
    1024 - очень много местных жителей. Если вы вызываете DeleteLocalRef() вам действительно не нужно 1024? Я использую Push/PopLocalFrame() , легче управлять, чем удалять вещи вручную.
  • 0
    Я разбираю исходный код в токенах, и он может иметь много токенов, поэтому я стараюсь выделять как можно больше локальных ссылок, хотя я делаю DeleteLocalRef каждый раз, когда заканчиваю ссылками.
Теги:
jni

1 ответ

0

Исправлено с вызовом EnsureLocalCapacity в JNI_OnLoad()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню