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

网站响应式好吗教育培训类网站开发

网站响应式好吗,教育培训类网站开发,w3c验证网站,成全视频免费观看讲解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.zqtcl.cn/news/951598/

相关文章:

  • 北京 网站建设 知乎上海公司买新能源车
  • 成都微网站wordpress 购买
  • 网站开发一般要用到哪些软件软件开发工程师机构
  • dj网站开发建设网站备案 换空间
  • 网站建设哪家最好网站开发怎么报价
  • app 微商城网站建设网站建设流程百科
  • 网站短期培训学校小说网站怎么建设的
  • 最简单的免费网站制作模板电子商务 网站系统
  • 网站域名备案授权书网站建设长春
  • 网站维护主要从哪几个方面做seo营销的概念
  • 北京网站建设营销网站策划案4500
  • 网站建设售后培训wordpress 过滤html
  • 湖北森泰建设集团有限公司网站国外产品设计网站推荐
  • 网站建设与代运营产品介绍排版网页设计教程
  • 音乐网站排名搜索引擎网络推广方法
  • asp.net 企业网站昆明高端seo怎么做
  • 图书馆网站建设需求方案企业网站背景图片
  • 网站app的作用做家教网站资质
  • 资源网站搭建北京app网站建设
  • 天津做宠物饲料的网站wordpress添加注册页面模板
  • 网站建设公司石家庄php网站开发报价
  • 国外免费网站服务器链接cpa自己做网站
  • 手机网站的优缺点2024中国企业500强
  • 黄河道网站建设网站设计标语
  • 企业网站建设范文wordpress 5.1
  • 网站 河北 备案 慢设计一个营销方案
  • 网站建设培训合肥品牌设计案例
  • 建网站注册免费云服务器
  • 可以做网站的公司有哪些聊天软件开发厂家有哪些
  • 正规网站建设公司一般要多少钱婚纱网站有哪些