写得android程序总是崩溃,感觉像是内存泄露,但是检查代码发现该释放的都释放了。最终无奈,删除了接口函数中的调用,只使用下面的测试代码。

 JNIEXPORT jboolean JNICALL Java_com_example_X_XX_XXX
(JNIEnv * env, jclass, jbyteArray temp1, jdoubleArray temp2)
{
jboolean* pArraytemp1 = (jboolean*) env->GetPrimitiveArrayCritical(temp1, );
jdouble* pArraytemp2 = (jdouble*) env->GetPrimitiveArrayCritical(temp2, ); bool result=true; env->ReleasePrimitiveArrayCritical(temp1, pArraytemp1, JNI_COMMIT);
env->ReleasePrimitiveArrayCritical(temp2, pArraytemp2,JNI_COMMIT); return result;
}

程序中什么代码都没有,但是调用2000次,程序总会崩溃。后来使用下面命令

adb shell setprop debug.checkjni 1

看到程序总会在512次之后崩溃。发现下面提示

jni pinned array reference table dump

网上说是android的reference table的原因,我没有释放缓冲区,因而每次总会往reference table里面添加,直至超过最大值1024(每次保存temp1和temp2两个参数,因而512次的时候已经到了reference table的最大值1024),程序崩溃。

搜了半天,也没有找到好的解决方法。最后看了一下JNI_COMMIT的定义,

上面写着JNI_COMMIT 是/* copy content, do not free buffer */。之后改成了0,上面的代码运行了50000次,也没有崩溃。

所以说以前的程序释放的时候,最后一个参数都是JNI_COMMIT,估计用多了都会有问题,还好写得android不多,等碰上的时候再改吧…

ps,其实网上有的参考代码在GetPrimitiveArrayCritical函数中的最后一个参数是使用的,可能和ReleasePrimitiveArrayCritical是对应的吧。懒得测试了。先这样吧…

最新文章

  1. [GitHub] GitHub Repositories
  2. 2016年11月14日--SQL创建数据库、表-查、插、删、改
  3. 普元部署多个应用的方法(适用EOS6.5以上版本,且无需governor中添加应用)
  4. sdut 487-3279【哈希查找,sscanf ,map】
  5. SPOJ PHRASES 后缀数组
  6. 用c语言编写二分查找法
  7. 在Delphi开发的服务中调用指定应用程序
  8. 我们为什么不用 Select * 吗?
  9. Python爬虫代理IP池
  10. C语言 课堂随记
  11. POJ 2031 Building a Space Station (计算几何+最小生成树)
  12. Oracle 表空间恢复
  13. 【Maven】Select Dependency 无法检索
  14. 唯一ID算法之:snowflake(Java版本)
  15. JS截取字符串多余的为...
  16. C#计算重重字符串,出现的次数
  17. Maven Return code is: 401
  18. github的使用,利用git shell命令行创建仓库并上传
  19. thrift系列 - 快速入门
  20. 【Alpha】Daily Scrum Meeting——blog3

热门文章

  1. OD调试2---TraceMe
  2. 关于Struts2的类型转换详解
  3. activiti笔记一:流程图xml文件
  4. getHibernateTemplate().find方法详解
  5. linux crontab运行
  6. A Distributed Multichannel MAC Protocol for Multihop Cognitive Radio Networks
  7. WEB.xml配置文件解读
  8. QT是否流行还是和历史有关啊(各个平台不同时间的方案都讲到了)
  9. MongoDb Windows linux平台环境及主流编程语言驱动安装同时配置mongoDb的远程连接
  10. Qt Creator编译时:cannot open file 'debug\QtGuiEx.exe' File not found