tabla sistema error durante desbordamiento bloqueo android android-ndk jni

android - sistema - Desbordamiento de tabla de referencia(max=512) JNI



desbordamiento de la tabla de bloqueo sap (1)

oneDim eliminar la referencia local del objeto env->DeleteLocalRef(oneDim); : env->DeleteLocalRef(oneDim); .

Estoy un poco atascado con este ... Desbordamiento de ReferenceTable (max = 512), estoy seguro de que tiene que ver con el número de referencias locales que se crean en mi llamada al método nativo ... Para solucionar el problema tengo incluso intentado eliminar las referencias locales de la llamada nativa; pero aún no puedo resolver el problema ... Paso una matriz 2D; que es aproximadamente 1024 X 1024 ...

Aquí está el rastro de error al que me refiero ... Estoy seguro de que la cantidad de objetos enteros que se crearán está causando el problema en mi caso ... ya que debería poder ver que 506 (I) se crean objetos ... Y entonces JNI golpea el cuello de botella ...

/dalvikvm(9498): GC_CONCURRENT freed 1981K, 41% free 6891K/11527K, external 1625K/2137K, paused 2ms+3ms /dalvikvm(9498): ReferenceTable overflow (max=512) /dalvikvm(9498): Last 10 entries in JNI local reference table: /dalvikvm(9498): 502: 0x40710920 cls=[I (4092 bytes) /dalvikvm(9498): 503: 0x40711920 cls=[I (4092 bytes) /dalvikvm(9498): 504: 0x40712920 cls=[I (4092 bytes) /dalvikvm(9498): 505: 0x40713920 cls=[I (4092 bytes) /dalvikvm(9498): 506: 0x40714920 cls=[I (4092 bytes) /dalvikvm(9498): 507: 0x40715920 cls=[I (4092 bytes) /dalvikvm(9498): 508: 0x40716920 cls=[I (4092 bytes) /dalvikvm(9498): 509: 0x40717920 cls=[I (4092 bytes) /dalvikvm(9498): 510: 0x40718920 cls=[I (4092 bytes) /dalvikvm(9498): 511: 0x40719920 cls=[I (4092 bytes) /dalvikvm(9498): JNI local reference table summary (512 entries): /dalvikvm(9498): 1 of Ljava/lang/Class; 236B /dalvikvm(9498): 1 of Ljava/lang/Class; 284B /dalvikvm(9498): 1 of Ljava/lang/Class; 572B /dalvikvm(9498): 2 of Ljava/lang/String; 28B (2 unique) /dalvikvm(9498): 506 of [I 4092B (506 unique) /dalvikvm(9498): 1 of [Ljava/lang/String; 28B /dalvikvm(9498): Memory held directly by tracked refs is 2071728 bytes /dalvikvm(9498): Failed adding to JNI local ref table (has 512 entries) /dalvikvm(9498): "main" prio=5 tid=1 RUNNABLE /dalvikvm(9498): | group="main" sCount=0 dsCount=0 obj=0x4001f198 self=0xce60 /dalvikvm(9498): | sysTid=9498 nice=0 sched=0/0 cgrp=default handle=-1345006528 /dalvikvm(9498): | schedstat=( 6990020745 1042358411 1629 ) /dalvikvm(9498): at pv.ndk.UcMobile.losInitialization(Native Method) /dalvikvm(9498): at pv.ndk.NdkActivity.onCreate(NdkActivity.java:69) /dalvikvm(9498): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) /dalvikvm(9498): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

Aquí está el código que estoy usando: Por favor, hágame saber qué es lo que estoy haciendo mal?

JNIEXPORT jboolean JNICALL Java_pv_ndk_UcMobile_losInitialization (JNIEnv * env, jobject jobj , jint height, jint width , jobjectArray elements){ elevData = new unsigned int*[height]; for(i=0; i< height; i++) { elevData[i] = new unsigned int[width]; jintArray oneDim= (jintArray)env->GetObjectArrayElement( elements, i); jint *element=env->GetIntArrayElements(oneDim, 0); for(j=0; j< width; j++) { elevData[i][j]= element[j]; } // This does not seem to be providing with the desired result // env->DeleteLocalRef(element); //I even tried with this approach env->ReleaseIntArrayElements(oneDim, element , 0); } return losObject.Init(elevData,1,10,2,2); }