я вызываю 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. Что мне делать?
Исправлено с вызовом EnsureLocalCapacity
в JNI_OnLoad()
DeleteLocalRef()
вам действительно не нужно 1024? Я используюPush/PopLocalFrame()
, легче управлять, чем удалять вещи вручную.