2015-02-12 85 views
0

我寫我的代碼JNI錯誤(應用程序錯誤):本地參照表溢出

jclass clazz = env -> FindClass("java/lang/System"); 
    jclass globalClass = reinterpret_cast<jclass>(env->NewGlobalRef(clazz)); 
    jmethodID methodId = env -> GetStaticMethodID(globalClass, "load", "(Ljava/lang/String;)V"); 
    jstring j_file = env -> NewStringUTF(filename.c_str()); 
    env -> CallStaticVoidMethod(globalClass, methodId, j_file); 
    if(env -> ExceptionCheck()) 
    { 
     env -> ExceptionDescribe(); 
     env -> ExceptionClear(); 
     LOG_E("Load library error!"); 
    } 
    else 
    { 
     LOG_E("load library success"); 
    } 
    env -> ReleaseStringUTFChars(j_file, filename.c_str()); 
    env -> DeleteGlobalRef(clazz); 

時運行它,它的誤差

A/art(4412): 
art/runtime/indirect_reference_table.cc:113] JNI ERROR (app bug): 
local reference table overflow (max=512)` `A/art(4412): 
art/runtime/indirect_reference_table.cc:113] local reference table dump: 
Last 10 entries (of 512): 

我不知道爲什麼,你能幫助我?

+0

發佈一切。你沒有發佈'j_file.' – EJP 2015-02-12 10:46:03

+0

是的,它應該像'env - > ReleaseStringUTFChars(j_file,filename.c_str()); env - > DeleteLocalRef(j_file); env - > DeleteGlobalRef(j_clazz); env - > DeleteLocalRef(clazz);',但它也有問題 – user4073982 2015-02-12 10:49:19

+0

根據ART,在一次JNI調用期間,您的C++代碼創建了超過512個本地引用。但它似乎不是來自你的片段。你還有別的東西在跑嗎?另外,請將您的調試日誌的末尾與「最後10個條目」一起發佈。 – ph0b 2015-02-12 13:57:51

回答

-1

在JNI,我重寫System.nativeLoad的方法,當我打電話System.load的System.load叫nativeLoad,所以......

0

ReleaseStringUTFChars()不釋放j_file。檢查documentation

您需要撥打DeleteLocalRef(j_env, j_file)

相關問題