JNI:EnsureLocalCapacity被忽略

时间:2013-11-10 19:04:46

标签: java c++ c java-native-interface

我在最开始的每个本机方法调用中调用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,}

因此,每当我不需要本地var时,我会调用env->DeleteLocalRef,因此似乎超出了16个本地参考限制。我该怎么办?

1 个答案:

答案 0 :(得分:0)

通过在JNI_OnLoad()

中调用EnsureLocalCapacity来修复