当前位置: 首页 > news >正文

台州网站设计飞速定制软件app

台州网站设计飞速,定制软件app,大批量刷关键词排名软件,保定公司做网站讲解JNI中的全局引用/局部引用/弱全局引用、缓存jfieldID和jmethodID的两种方式#xff0c;并编写两种缓存方式的示例代码。1.从Java虚拟机创建的对象传到本地C/C代码时会产生引用#xff0c;根据Java的垃圾回收机制#xff0c;只要有引用存在就不会出发该引用指向的Java对象…讲解JNI中的全局引用/局部引用/弱全局引用、缓存jfieldID和jmethodID的两种方式并编写两种缓存方式的示例代码。1.从Java虚拟机创建的对象传到本地C/C代码时会产生引用根据Java的垃圾回收机制只要有引用存在就不会出发该引用指向的Java对象的垃圾回收。2.这些引用在JNI中分为三种全局引用Global Reference局部引用Local Reference若全局引用Weak Global Reference since JDK1.23.局部引用1)最常见的引用类型基本上通过JNI返回来的引用都是局部引用。例如使用NewObject就会返回创建出来的实例的局部引用局部引用只在该native函数中有效所有在该函数中产生的局部引用都会在函数返回的时候自动释放也可以使用DeleteLocalRef函数手动释放该引用。2)想一想既然局部引用能够在函数返回时自动释放为什么还需要DeleteLocalRef函数呢3)实际上局部引用存在就会防止其指向的对象被垃圾回收尤其是当一个局部引用指向一个很庞大的对象或是在一个循环中生成了局部引用最好的做法就是在使用完该对象后或在循环尾部把这个引用释放掉以确保在垃圾回收器被处罚的时候被回收。4)在局部引用的有效期中可以传递到别的本地函数中要强调的是他的有效期仍然只在一次的Java本地函数调用中所以千万不能用C全局变量保存它或者把它定义为C静态局部变量。4.全局引用1)全局引用可以跨越当前线程在多个native函数中有效不过需要编程人员手动来释放该引用全局引用存在期间会防止在Java的垃圾回收。2)与局部引用不同全局引用的创建不是由JNI自动创建的全局引用时需要调用NewGlobalRef函数而释放它需要使用ReleaseGlobalRef函数。5.弱全局引用1)Java1.2新出来的功能与全局引用相似创建跟删除都需要由编程人员来进行。这种引用与全局引用一样可以再多个本地代码有效也跨越多线程有效不一样的是这种引用将不会阻止垃圾回收器回收这个引用所指向的对象。2)使用NewWeakGlobalRef跟ReleaseWeakGlobalRef来产生和解除引用。6.关于引用的一些函数jobject NewGlobalRef(jobject obj);jobject NewLocalRef(jobject obj);jobject NewWeakGlobalRef(jobject obj);void DeleteGlobalRef(jobject obj);void DeleteLocalRef(jobject obj);void DeleteWeakGlobalRef(jobject obj);jboolean IsSameObject(jobject obj1, jobject obj2); // 这个函数对于弱全局引用还有一个特别的功能把NULL传入要比较的对象中就能够判断弱全局引用所指向的Java对象是否被回收。7.缓存jfieldID,jmethodID1)取得jieldID跟jmethodID的时候会通过该属性、方法名称加上签名来查询相应的jfieldID,jmethodID。这种查询相对来说开销较大我们可以将这些FieldID,MethodID缓存起来这样只需要查询一次以后就使用缓存起来的FieldID,MethodID。2)介绍两种缓存方式1.在用的时候缓存2.在Java类初始化时缓存11)在第一次使用的时候缓存在native code中使用static局部变量来保存已经查询过的id这样就不会再每次的函数调用时查询而只要第一次查询成功后就保存起来了。不过在这种情况下就不得不考虑多线程同时呼叫此函数时可能会招致同时查询的危机不过这种情况是无害的因为查询同一个属性方法的ID通常返回的是一样的值。JNIEXPORT void JNICALL Java_Test_native(JNIEnv* env, jobject obj){static jfieldID fieldID_string NULL;jclass clazz env-GEtObjectClass(obj);if(fieldID_string NULL){fieldID_string env-GetFieldID(clazz, string, Ljava/lang/String;);}// other code...}22)在Java类初始化的时候缓存更好的一个方式就是在任何native函数调用前把id全部存起来。我们可以让Java在第一次加载这个类的时候首先调用本地代码初始化所有的jfieldID,jmethodID这样的话就可以省去多次的确定id是否存在的语句当然这些jfieldID,jmethodID是定义在C/C的全局。使用这种方式的好处当Java类卸载或是重新加载的时候也会重新呼叫该本地代码来重新计算IDs。课程最后总结在这一课中我们学习了1.最简单的Java调用C/C函数的方法2.取得方法、属性的ID学会了取得/设置属性还有Java函数的调用。3.Java/c之间的字符串的转换问题。4.在C/C下如何操作Java数组。5.三种引用方式6.如何缓存属性和方法的ID使用JNI的两个弊端1.使用了JNI那么这个应用就不能跨平台了如果需要移植到别的平台上那么native代码就需要重新编写。2.Java是强类型的语言而C/C不是你必须写JNI时更小心。3.尽量少使用本地代码。其它1.异常处理2.C/C如何启动JVM3.JNI跟多线程介绍两本书作为参考1)The Java Native Interface Programmers Guide and Specification2))JNI User Guide
http://www.huolong8.cn/news/420760/

相关文章:

  • 男人女人做那个网站东莞智通人才招聘网
  • 小程序软件制作网站填写网站信息
  • 网站建设 会计分录苏州网站建设搭建
  • 哪个网站有律师做的案件张家界百度seo
  • 北京网站开发培训中心wordpress推荐管理
  • 永济市住房保障和城乡建设管理局网站甘肃网站建设域名注册公司
  • 怎么做淘宝返利网站吗wordpress主题谁的最好
  • 网站建设 教学视频教程南昌推广软件
  • 网站官网建设检察机关门户网站建设工作自查报告
  • 做租赁哪个网站好产看网站权重
  • 在线制作图片网站如何建立自己网站视频
  • 网站平台由什么搭建丽水市城乡建设局网站
  • 一篇关于大学网站建设与管理的论文免费python在线正常网站
  • 成都锦江建设局网站微信网站需要一个域名要怎么做
  • 一个好的网站有什么标准大良网站智能推广价格
  • 网站没有备案 合法吗智慧团建官网登陆入口
  • 关于网站首页建设的文章中国门户网站
  • 外贸服装网站模板现在流行的网站制作工具
  • 泰然建设网站哔哩哔哩18款禁用软件
  • 郑州网站建设e00招聘网站建设计划书
  • 安徽公司招聘网站网站过期查询
  • 洛阳免费网站建设wordpress如何转换为中文版
  • html5网站后台模板网站建设与营销服务
  • 色彩搭配的网站做的比较好的时尚网站
  • 建站公司合同模板最新网游
  • 网站静态化设计wordpress 安装 404
  • 网站动态页面打不开wordpress切换固定链接404
  • 青海营销网站建设多少钱腾讯推广一次广告多少钱
  • 广州市白云区网站建设维护wordpress支付宝红包
  • 外国人做那个视频网站wordpress主题官方网站