JNI之路径初探---5

本篇文章讲解JNI接收处理完从Java层传递的数据后内存的同步问题。

从JAVA层传递数据给C排序
数组排序及内存同步

qsort是一个C语言的排序函数,这不是我们讨论的重点,
jint * (JNICALL *GetIntArrayElements)
(JNIEnv *env, jintArray array, jboolean *isCopy);
这个函数的作用是得到一个jni数组元素的指针,jintarray里面的每一个元素都是jint类型,数组的特性就是第一个元素的地址就是它的指针,根据元素类型就可以往下得到所有元素,这个函数的第三元素是一个jboolean类型的指针,它的含义就是说如果我现在在C语言层处理这个数组,它要不要复制,不复制代表处理的是和JAVA同一个内存即数组,这里官方建议填NULL,那么数组排序后,操作的也是同一块内存为什么还要去同步一下呢?这里我打印了一下他们的地址,发现不同,由此可以得出NULL和JNI_TRUE都会复制内存,如果有兴趣的同学可以试一下JNI_FALUSE,这个参数同样还是复制了,而填入JNI_TURE后再同步内存会提示JVM运行时的异常,所以不管是哪一个参数其实都不是操作同一块内存,最后如果要在JAVA层去处理结果一定要同步一下内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值