在我的android应用程序中,我经常调用一个返回一些数据的本机函数。经过多次通话后,我收到了跟踪显示跟踪的崩溃。
W/dalvikvm(14588): ReferenceTable overflow (max=1024)
W/dalvikvm(14588): Last 10 entries in JNI pinned array reference table:
W/dalvikvm(14588): 1014: 0x41f3b7a8 cls=[B (38036 bytes)
W/dalvikvm(14588): 1015: 0x411c6f88 cls=[B (1620 bytes)
W/dalvikvm(14588): 1016: 0x405b2f48 cls=[B (1052 bytes)
W/dalvikvm(14588): 1017: 0x411c4be0 cls=[B (92 bytes)
W/dalvikvm(14588): 1018: 0x41f44c40 cls=[B (38036 bytes)
W/dalvikvm(14588): 1019: 0x411c5a78 cls=[B (60 bytes)
W/dalvikvm(14588): 1020: 0x413ac4e8 cls=[B (38036 bytes)
W/dalvikvm(14588): 1021: 0x411c7970 cls=[B (52 bytes)
W/dalvikvm(14588): 1022: 0x41e2b1b0 cls=[B (38036 bytes)
W/dalvikvm(14588): 1023: 0x407e06c8 cls=[B (60 bytes)
W/dalvikvm(14588): JNI pinned array reference table summary (1024 entries):
W/dalvikvm(14588): 90 of [B 36B (90 unique)
W/dalvikvm(14588): 127 of [B 44B (127 unique)
W/dalvikvm(14588): 63 of [B 52B (63 unique)
W/dalvikvm(14588): 78 of [B 60B (78 unique)
W/dalvikvm(14588): 50 of [B 68B (50 unique)
W/dalvikvm(14588): 30 of [B 76B (30 unique)
W/dalvikvm(14588): 15 of [B 84B (15 unique)
W/dalvikvm(14588): 18 of [B 92B (18 unique)
W/dalvikvm(14588): 11 of [B 100B (11 unique)
W/dalvikvm(14588): 9 of [B 108B (9 unique)
W/dalvikvm(14588): 4 of [B 116B (4 unique)
W/dalvikvm(14588): 5 of [B 132B (5 unique)
W/dalvikvm(14588): 1 of [B 140B
W/dalvikvm(14588): 4 of [B 156B (4 unique)
W/dalvikvm(14588): 1 of [B 180B
W/dalvikvm(14588): 1 of [B 204B
W/dalvikvm(14588): 1 of [B 212B
W/dalvikvm(14588): 2 of [B 244B (2 unique)
W/dalvikvm(14588): 1 of [B 332B
W/dalvikvm(14588): 1 of [B 1044B
W/dalvikvm(14588): 1 of [B 1052B
W/dalvikvm(14588): 1 of [B 1620B
W/dalvikvm(14588): 510 of [B 38036B (510 unique)
W/dalvikvm(14588): Memory held directly by tracked refs is 19432832 bytes
E/dalvikvm(14588): Failed adding to JNI pinned array ref table (1024 entries)
我已经发布了使用的字节数组,即ReleaseByteArrayElements。 一个本机功能代码块
jbyte *inArray = (*env)->GetByteArrayElements(env,datay,JNI_FALSE);
jbyte *outArray = (*env)->GetByteArrayElements(env, datah,JNI_FALSE);
int size=(*env)->GetArrayLength(env,hdata);
....
unsigned char *data=outArray;
memcpy(data,outbuf,out_size);
(*env)->ReleaseByteArrayElements(env, datay, inArray,JNI_FALSE);
(*env)->ReleaseByteArrayElements(env, datah, outArray,JNI_FALSE);
data=NULL;
任何想法?