Ben bunlardan biraz takılı kaldım ... ReferenceTable taşması (max = 512), Yerel yöntemimde oluşturulmakta olan Yerel Referans Sayısı ile ilgili olduğundan eminim. call ... Konuyu çözmek için yerel referanslardan yerel referansları çıkarmaya çalıştım bile; ama yine de sorunu çözemiyorum ... Bir 2D Array geçiyorum; Yaklaşık 1024 X 1024 ...ReferenceTable taşması (max = 512) JNI
İşte burada atıfta bulunduğum hata izlemesi ... Tam Sayıda Nesnelerin oluşturulmasının, benim durumum için soruna neden olduğundan eminim ... beni ben yanlış yapıyorum ne böyle bildirin: Burada
/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)
kullanıyorum kodu ... 506 (I) Nesneler oluşturulur ... Ve sonra JNI'yı darboğaz vurur görmek için?
env->DeleteLocalRef(oneDim);
:
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);
}
çözüm beni daha fazla nesne oluşturmak yardım ettin ... ama muhtemelen benim uygulama paketi (pv.ndk) için başka bir sorun yarattı - Sadece herhangi bir hata mesajı olmadan bu VM crahes sonra .. onlar ilgili olmayan umut D/Vending (18272): [11] LocalAssetCache.updateOnePackage(): pv.ndk – Pranav
Hmm için yerel bilgi yok, bu garip. ReleaseIntArrayElements() 'dan sonra' DeleteLocalRef() 'yazdınız mı? – beetoom
sadece bunun hakkında emin olmak istedim, İkisini de koymam gerek? şu anda sadece DeleteLocalRef kullanıyorum [çünkü yerel referans tablosunun 512 limitine isabet ediyorum] Ben ya DeleteLocalRef ya da ReleaseIntArrayElements kullanmam gerektiği izlenimi altındaydım; ve her ikisi de aynı amacı farklı bir şekilde hizmet ediyorlar. – Pranav