2012-02-21 4 views
11

मैं इस के साथ थोड़ा फंस गया हूं ... संदर्भटेबल ओवरफ़्लो (अधिकतम = 512), मुझे यकीन है कि इसे मेरे मूल विधि में बनाए गए स्थानीय संदर्भों की संख्या के साथ करना है कॉल करें ... इस मुद्दे के आसपास काम करने के लिए मैंने देशी कॉल से स्थानीय संदर्भों को हटाने की भी कोशिश की है; लेकिन फिर भी मैं समस्या को हल करने में असमर्थ हूं ... मैं 2 डी ऐरे पास कर रहा हूं; जो लगभग 1024 x 1024 है ...संदर्भटेबल ओवरफ़्लो (अधिकतम = 512) जेएनआई

यहां त्रुटि त्रुटि है जिसका मैं जिक्र कर रहा हूं ... मुझे यकीन है कि बनाए गए इंटीजर ऑब्जेक्ट्स की संख्या मेरे मामले के लिए समस्या पैदा कर रही है ... जैसा कि आप सक्षम होना चाहिए देखने के लिए 506 (आई) वस्तुओं बनाई गई हैं ... और फिर JNI टोंटी हिट ...

/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) 

यहाँ कोड मैं का उपयोग कर रहा है: कृपया मुझे पता है कि यह क्या है कि मैं गलत कर रहा हूँ कौन है? 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); 
} 

उत्तर

5

आप oneDim वस्तु से स्थानीय संदर्भ को हटाने के लिए की जरूरत है।

+0

समाधान ने मुझे और ऑब्जेक्ट बनाने में मदद की ... लेकिन शायद इसने मेरे एप्लिकेशन पैकेज (pv.ndk) के लिए एक और मुद्दा बनाया है - मुझे उम्मीद है कि वे संबंधित नहीं हैं .. इस वीएम के बिना किसी भी त्रुटि संदेश के बिना डी/वेंडिंग (18272): [11] LocalAssetCache.updateOnePackage(): pv.ndk – Pranav

+0

हम्म के लिए कोई स्थानीय जानकारी अजीब बात नहीं है। आपने 'releaseLocalRef()' को 'रिलीज़इन्टएरेएलेमेंट्स()' के बाद रखा है, है ना? – beetoom

+0

बस इस पर यकीन करना चाहता था, क्या मुझे दोनों को रखने की ज़रूरत है? वर्तमान में मैं केवल DeleteLocalRef का उपयोग कर रहा हूं [कारण मैं स्थानीय संदर्भ तालिका की 512 सीमा को मार रहा हूं] मुझे इंप्रेशन के तहत था कि मुझे या तो DeleteLocalRef या रिलीज़इन्टएरेरेइमेंट्स का उपयोग करने की आवश्यकता है; और वे दोनों एक ही तरीके से एक ही उद्देश्य में सेवा करते हैं। – Pranav