2016-10-13 5 views
3

私はこのスレッドによるによる私のネイティブコードのリークにこのエラーを取得しておいてください。"JNIエラー(アプリのバグ):弱いグローバル参照テーブルのオーバーフロー"なぜですか?

ReferenceTable overflow (max=512) JNI

まだ、それは私にAttachCurrentThread漏れです。

私はこのコードを試してみましたし、それが

// this code LEAKS! 
// C++: 
void Engine::UpdateCamera(float x, float y, float z) { 
    JNIEnv *jni; 
    app_->activity->vm->AttachCurrentThread(&jni, NULL); 
    //Do nothing 
    app_->activity->vm->DetachCurrentThread(); 
    return; 
} 


// Java 
public void updateCamera(final float x, final float y, final float z) { 
    if (_label2 == null) 
     return; 

    StackTraceElement trace = new Exception().getStackTrace()[0]; 
    Log.e(APP_TAG, "Called:" + 
      trace.getClassName() + "->" + trace.getMethodName() + ":" + trace.getLineNumber()); 

} 

をリークその後、私は単純にすべてをコメントアウトし、プログラムが漏れて停止し、永遠に走った:(

// this code never leaks, but it does not do anything either 
void Engine::UpdateCamera(float x, float y, float z) { 
    JNIEnv *jni; 
    //app_->activity->vm->AttachCurrentThread(&jni, NULL); 
    //app_->activity->vm->DetachCurrentThread(); 
    return; 
} 

誰もがAttachCurrentThreadの問題をリークして経験していますか?

感謝

+1

「メッセージ」への参照が削除されていません – user2543253

+0

すべてを削除してもリークしました。 AttachCurrentThreadが問題を引き起こしているようです。あなたが私を答えに導くことができるなら、私の評判から50ポイントはグラブです。 – gmmo

+0

いくつのスレッドが実行されていますか?エラーが発生する前に 'Engine :: UpdateCamera()'をどのくらい頻繁に呼び出しますか? –

答えて

3

デバッガに接続していますか?そうであれば、接続を切断すると弱い参照テーブルが適切な値に戻ります。

私はこの同じ問題を抱えていました。私はデバッガを実行すると、これが発生します。

+0

これは質問に対する答えを提供しません。十分な[評判](https://stackoverflow.com/help/whats-reputation)があれば、[投稿にコメントする]ことができます(https://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの明確化を必要としない回答を提供する](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューの投稿](レビュー/低品質の投稿/ 17077683) – miken32

+2

@ miken32これは有効な回答ではありません。接続を切断するように指示し、問題を解決することができます。 – paper1111

関連する問題