ReferenceTable overflow (max=512) JNI

I am a little stuck with this one…
ReferenceTable overflow (max=512), I am sure it has to do with the Number of Local References getting created in my native method call… To work around the issue I have even tried to remove the local references from the native call; but still I am unable to solve the problem… I am passing a 2D Array; which is approaximately 1024 X 1024 …

Here is the error trace I am referring to … I am sure that number of Integer Objects getting created is causing the issue for my case … as you should be able to see 506(I) Objects are created… And then JNI hits the bottleneck…

  • Android: how to disable controls during progress bar is active
  • Android: Button click event
  • How to handle onTouch event for map in Google Map API v2?
  • Android GCM (push notification): device doesn't receive notification if application is stopped
  • How to align Radio button at the center of the screen
  • Failed to resolve:
  • /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(
    /dalvikvm(9498):   at
    /dalvikvm(9498):   at

    Here is the code I am using :
    Please let me know what is it that I am doing wrong ?

    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=
                             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);

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.