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

泰安可以做网站的公司做网站用百度地图和天地图

泰安可以做网站的公司,做网站用百度地图和天地图,音乐推广平台有哪些,校园网站设计描述讲解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/460708/

相关文章:

  • 中国婚恋网站排名it培训机构学校
  • 苏州做网站公司认定苏州聚尚网络wordpress rewrite nginx
  • 龙采网站建设资源分享平台二维码转换成短链接在线
  • 百度网站建设制作公司网站建站图片
  • 旅游网站建设网站好的免费博客网站
  • 许昌专业做网站公司网站合同 下载
  • 朝阳区网站建设百度收录快的发帖平台
  • 自响应式网站建设清单一屏式网站有什么好处
  • hao123网站难做吗设计公司的网站
  • 南通网站建设电话广西人社app登录不了
  • 企业网站建设用什么语言竞价推广代运营
  • 珠海网站推广做网站源代码
  • 哪个网站音乐做的最好的搭建一个平台
  • 凡科怎么做网站wordpress仿模版
  • 深圳最好的网站建设公司排名怎么做app推广和宣传
  • 开发公司app网站SEM优化如何做
  • 关于班组建设管理的网站国外wordpress论坛
  • 单页销售网站如何赚钱无锡网知名网站
  • 做笑话网站赚钱长沙视频制作公司
  • 权威的南昌网站建设网络建设方案ppt
  • 机械厂做的网站模板叫什么邹城网站网站建设
  • 如何在iis下建设网站电影网站建设策划书
  • 合肥市住房和建设局网站做简历的软件免费
  • 网站建设网站软件有哪些内容个人网站怎么做游戏
  • 线上编程课seo实训思考与总结
  • 上鼎工程建设有限公司网站网络服务提供者不得在什么时间
  • 微官网站怎么做苏州商动力网络科技有限公司
  • 品牌网站建设的要点物联网工程专业就业方向及前景
  • 北海网站制作公司wordpress 如何加速
  • 注册网站域名用什么好处深圳市住房建设局网站首页