ReferenceTable溢出(最大值= 512)JNI [英] ReferenceTable overflow (max=512) JNI

查看:177
本文介绍了ReferenceTable溢出(最大值= 512)JNI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有点卡住这一个... ReferenceTable溢出(最大值= 512),我相信它有跟我的本地方法调用入门创建...要解决此问题,我甚至试图删除从本地呼叫本地引用本地引用的数量;但还是我无法来解决这个问题......我传递一个二维数组;这是approaximately 1024×1024 ...

下面是错误跟踪我指的是...我相信,一些Integer对象的入门创建导致了问题我的情况......你应该可以看到被创建506(I)的对象。 ..然后JNI碰到瓶颈...

  / dalvikvm(9498):GC_CONCURRENT释放1981K,41%免费6891K / 11527K,外部1625K / 2137K,暂停2MS + 3ms的
/ dalvikvm(9498):ReferenceTable溢出(最大值= 512)
/ dalvikvm(9498):在JNI本地参照表最后10项:
/ dalvikvm(9498):502:0x40710920 CL​​S = I(4092字节)
/ dalvikvm(9498):503:0x40711920 CL​​S = I(4092字节)
/ dalvikvm(9498):504:0x40712920 CL​​S = I(4092字节)
/ dalvikvm(9498):505:0x40713920 CL​​S = I(4092字节)
/ dalvikvm(9498):506:0x40714920 CL​​S = I(4092字节)
/ dalvikvm(9498):507:0x40715920 CL​​S = I(4092字节)
/ dalvikvm(9498):508:0x40716920 CL​​S = I(4092字节)
/ dalvikvm(9498):509:0x40717920 CL​​S = I(4092字节)
/ dalvikvm(9498):510:0x40718920 CL​​S = I(4092字节)
/ dalvikvm(9498):511:0x40719920 CL​​S = I(4092字节)
/ dalvikvm(9498):JNI本地参照表摘要(512项):
/ dalvikvm(9498):1 Ljava /朗/班; 236B
/ dalvikvm(9498):1 Ljava /朗/班; 284B
/ dalvikvm(9498):1 Ljava /朗/班; 572B
/ dalvikvm(9498):2 Ljava /朗/字符串; 28B(2唯一的)
/ dalvikvm(9498):506 [我4092B(506独有)
/ dalvikvm(9498):1 [Ljava /朗/字符串; 28B
/ dalvikvm(9498):直接追踪裁判举办内存2071728字节
/ dalvikvm(9498):无法增加JNI本地参考表(有512项)
/ dalvikvm(9498):主要的PRIO = 5 TID = 1 RUNNABLE
/ dalvikvm(9498)|组=主SCOUNT = 0 dsCount = 0的obj = 0x4001f198自我= 0xce60
/ dalvikvm(9498)| sysTid = 9498漂亮= 0 sched的= 0/0 CGRP =默认的手柄= -1345006528
/ dalvikvm(9498)| schedstat =(6990020745 1042358411 1629)
/ dalvikvm(9498):在pv.ndk.UcMobile.losInitialization(本机方法)
/ dalvikvm(9498):在pv.ndk.NdkActivity.onCreate(NdkActivity.java:69)
/ dalvikvm(9498):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
/ dalvikvm(9498):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
 

下面是code我使用: 请让我知道它是什么,我做错了什么?

  JNIEXPORT jboolean JNICALL Java_pv_ndk_UcMobile_losInitialization
  (JNIEnv的* ENV,jobject jobj,jint高度,jint宽度,jobjectArray元素){

   elevData =新的无符号整型* [高];

对于(i = 0; I<高度;我++){
    elevData [我] =新的无符号整型宽度]

    jintArray oneDim =
    (jintArray)ENV-> GetObjectArrayElement(
                         元素,I);
     jint *元素= ENV-> GetIntArrayElements(oneDim,0);
     为(J = 0; J<宽度; J ++){
         elevData [I] [J] =元素[J]。
     }
     //似乎这不被提供与所希望的结果
     // ENV-> DeleteLocalRef(元);

     //我甚至尝试这种方法
     ENV-> ReleaseIntArrayElements(oneDim,元素,0);

  }

返回losObject.Init(elevData,1,10,2,2);
}
 

解决方案

您需要删除 oneDim 对象的局部引用: ENV-> DeleteLocalRef(oneDim);

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...

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

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

解决方案

You need to delete local reference from oneDim object: env->DeleteLocalRef(oneDim);.

这篇关于ReferenceTable溢出(最大值= 512)JNI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆