JNI之路径初探---5

作者: markRao | 来源:发表于2017-06-23 23:04 被阅读37次

本篇文章讲解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层去处理结果一定要同步一下内存。

相关文章

  • JNI之路径初探---5

    本篇文章讲解JNI接收处理完从Java层传递的数据后内存的同步问题。 qsort是一个C语言的排序函数,这不是我们...

  • JNI之路径初探---3

    本篇简述如何在JNI下调用父类方法 这里讲一下如何拿到类中方法和属性的签名:1,cmd进入命令行2,cd 命令切到...

  • JNI之路径初探---4

    本篇文章讲解如何处理JNI下返回字符串乱码 代码比较简单,也不再详细说明,适合有C、C++和JNI基础的同学学习。

  • JNI之路径初探---1

    首先要明白,什么是JNI,我们做安卓开发为什么要学习JNI,学习JNI能干嘛?JNI全称Java Native I...

  • JNI之路径初探---6

    本篇文章讲解JNI下属性的内存释放问题,众所周知,JAVA有四大引用,1,强引用2,弱引用3,软引用4,虚引用。J...

  • JNI之路径初探---2

    上一篇博客写的是Java调用C、C++的例子,本篇就演示一下C、C++怎么调用Java的属性和方法。

  • 初探JNI

    JNI搭建 1.下载ndk ,ndk大于r7则直接解压 2.eclipse 给定ndk 路径 3.新建项目后配置n...

  • JNI初探

    NDK产生背景 Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于Java...

  • JNI系列入门之C语言与Java的双向通信(二)

    JNI系列文章:JNI系列之入门Hello JNI C(一)JNI系列之入门Hello JNI C(二)JNI系列...

  • JNI系列入门之Hello JNI C(二)

    JNI系列文章:JNI系列之入门Hello JNI C(一)JNI系列之入门Hello JNI C(二)JNI系列...

网友评论

    本文标题:JNI之路径初探---5

    本文链接:https://www.haomeiwen.com/subject/mpdnqxtx.html