城市直播房产教育博客汽车
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

阿里面试官讲解一下JNI的三种引用

9月25日 长歌行投稿
  从Java虚拟机创建的对象传到本地CC代码时就会产生引用。根据Java的垃圾回收机制,只要有引用存在就不会触发该引用指向的Java对象的垃圾回收。这些引用在JNI中分为三种
  全局引用(GlobalReference)
  局部引用(LocalReference)
  弱全局引用(WeakGlobalReference),JDK1。2引入1。局部引用
  最常见的引用类型,基本上通过JNI返回来的引用都是局部引用
  例如,使用NewObject就会返回创建出来的实例的局部引用。局部引用只在该native函数中有效,所有在该函数中产生的局部引用,都会在函数返回的时候自动释放(freed)。也可以使用DeleteLocalRef函数进行手动释放该引用。
  想一想既然局部引用能够在函数返回时自动释放,为什么还需要DeleteLocalRef函数呢?
  实际上局部引用存在,就会防止其指向的对象被垃圾回收。尤其是当一个局部引用指向一个很庞大的对象,或是在一个循环中生成了局部应用;最好的做法就是在使用完该对象后,或在该循环尾部把这个引用释放掉,以确保在垃圾回收器被触发的时候被回收。
  在局部引用的有效期中,可以传递到别的本地函数中,要强调的是它的有效期仍然只在一次的Java本地函数调用中,所以千万不能用C全局变量保存它或是把它定义为C静态局部变量。2。全局引用
  全局引用可以跨越当前线程,在多个native函数中有效,不过需要编程人员手动来释放该引用。全局引用存在期间会防止在Java的垃圾回收的回收。
  与局部引用不同,全局引用的创建不是由JNI自动创建的,全局引用需要调用NewGlobalRef函数,而释放它需要使用ReleaseGlobalRef函数。3。弱全局引用
  弱全局应用是JDK1。2新出来的功能,与全局引用相似,创建跟释放都需要由编程人员来进行操作。这种引用与全局引用一样可以在多个本地代码有效,也可以跨越多线程有效;不一样的是,这种引用将不会阻止垃圾回收器回收这个引用所指向的对象。
  使用NewWeakGlobalRef跟ReleaseWeakGlobalRef来产生和释放应用。4。关于引用的一些函数jobjectNewGlabalRef(jobjectobj);jobjectNewLocalRef(jobjectobj);jobjectNewWeakGlobalRef(jobjectobj);voidDeleteGlobalRef(jobjectobj);voidDeleteLocalRef(jobjectobj);jbooleanIsSameObject(jobjectobj1,jobjectobj2);
  IsSameObject函数对于弱引用全局应用还有一个特别的功能,把NULL传入要比较的对象中,就能够判断弱全局引用所指向的Java对象是否被回收。5。缓存jfieldIDjmethodID
  获取jfieldID与jmethodID的时候会通过该属性方法名称加上签名来查询相应的jfieldIDjmethodID。这种查询相对来说开销较大。在开发中可以将这些FieldIDMethodID缓存起来,这样就只需要查询一次,以后就使用缓存起来的FieldIDMethodID。
  下面介绍两种缓存方式
  在使用时缓存(CachingatthePointofUse)
  在Java类初始化时缓存(CachingattheDefiningClasssInititalizer)5。1在使用时缓存
  在native代码中使用static局部变量来保存已经查询过的jfieldIDjmethodID,这样就不会在每次的函数调用时查询,而只要一次查询成功后就保存起来了。JNIEXPORTvoidJNICALLJavaTestnative(JNIEnvenv,jobjectojb){staticjfieldIDfieldIDstrNULL;jclassclazzenvGetObjectClass(obj);if(fieldIDstrNULL){fieldIDstrenvGetFieldID(clazz,strField,LjavalangString);}TODOOthercodes}
  不过这种情况下,就不得不考虑多线程同时调用此函数时可能导致同时查询的并发问题,不过这种情况是无害的,因为查询同一个属性或者方法的ID,通常返回的值是一样的。5。2在Java类初始化时缓存
  更好的一个方式就是在任何native函数调用之前把id全部缓存起来。
  可以让Java在第一次加载这个类的时候,首先调用本地代码初始化所有的jfieldIDjmethodID,这样的话就可以省去多次判断id是否存在的冗余代码。当然,这些jfieldIDjmethodID是定义在CC的全局。
  使用这种方式还有好处,当Java类卸载或者重新加载的时候,也会重新调用该本地代码来重新计算IDs。
  java代码publicclassTestNative{static{initNativeIDs();}staticnativevoidinitNativeIDs();intpropInt0;StringpropSpublicnativevoidotherNative();TODOOthercodes}
  CC代码globalvariablesjfieldIDgpropIntid0;jfieldIDgpropStrid0;JNIEXPORTvoidJNICALLJavaTestNativeinitNativeIDs(JNIEnvenv,jobjectclazz){gpropIntidenvGetFieldID(clazz,propInt,I);gpropStridenvGetFieldID(clazz,propStr,LjavalangS);}JNIEXPORTvoidJNICALLJavaTestNativeotherNative(JNIEnvenv,jobjectobj){TODOgetfieldwithgpropIntidgpropStrid}6。总结
  最简单的Java调用CC函数的方法
  获取方法属性的ID;学会了获取设置属性;还有Java函数的调用
  JavaC之间的字符串的转换问题
  在CC下如何操作Java的数组
  三种引用方式
  如何缓存属性方法的ID7。回顾
  使用了JNI,那么这个Java应用将不能跨平台了。如果要移植到别的平台上,那么native代码就需要重新进行编写
  Java是强类型的语言,而CC不是。因此,必须在写JNI时倍加小心
  总之,必须在构建Java程序的时候,尽量不用或者少用本地代码
  附
  异常处理
  CC如何启动JVM
  JNI与多线程《TheJavaNativeInterfaceProgrammersGuideandSpecification》
  《JNIUserGuide》
搜索 投诉 评论 转载

赤井AkaiAJ490FL是一款80年代生产的老式收录机音响一款80年代生产老式的收录机,这款音响设计有点奇怪。就其尺寸而言,它具有相当多的功能和非常好的声音。这款盒式磁带播放器由阿凯电子有限公司在日本制造的。尺寸:宽44厘……台积电5纳米将成大规模且长期需求制程台积电N5技术进入量产第三年,智能手机和高效能运算应用推动下,需求持续强劲,证明台积电N5技术为业界最具竞争力的先进制程技术。为了进一步提升下一波5纳米制程产品的效能、功耗和密……同样是2080ti,为什么华硕卖一万二,七彩虹卖八千?对性能一块显卡最重要的就是看显示芯片,也就是GPU,因为GPU的规格和档次是决定着显卡性能的关键,但是我们可以看到很多品牌搭载同一颗GPU芯片的显卡,比如华硕的2080ti和七彩虹的……这个省燃油车禁售时间已敲定随着禁燃被频繁提起大家也努力接受着两个事实:新能源车时代已来、燃油车终得淘汰截止到目前,荷兰、挪威、巴黎、法国、英国、印度等国家均推出了具体的禁售时间表。而凯……阿里面试官讲解一下JNI的三种引用从Java虚拟机创建的对象传到本地CC代码时就会产生引用。根据Java的垃圾回收机制,只要有引用存在就不会触发该引用指向的Java对象的垃圾回收。这些引用在JNI中分为三种……hbase的常见运维操作1、处理hbase的master宕机操作命令:。hbasedaemon。shstartmaster。hbasedaemon。shstartzookeeper可……全球充电最快手机5分钟回血50华为未发布新手机MWC2022金磊假装发自巴塞罗那量子位公众号QbitAI一年一度的全球手机行业盛宴世界移动通信大会(MWC),已经在巴塞罗那正式拉开序幕(2月28日3月3日)。MWC是手……情人节送礼指南,SamsungBESPOKE系列冰箱来支招随着虎年春节的年味逐渐收尾,充满爱意的情人节又悄然而至。这个处处洋溢着爱与浪漫的特殊日子里,世界上不同国家的情侣们都在以各式各样的形式秀恩爱,品牌商们也为新一轮的浪漫经济铆足马……库克开始降维打击?iPhone13降价销售,iPhone12自从库克接任苹果CEO以来,为了获取更高的销量和利润,每年新iPhone的价格,往往都会是一个意料之外的惊喜。就比如说去年的iPhone12,其作为苹果首款5G手机,发布之前所……任天堂最失败的家用主机WiiU谁都没有想到,在经历了Wii的大火之后,任天堂的WiiU却失败了,而且是公司有史以来最失败的家用机。今天,我把放在角落吃灰很久的WiiU清了一下灰,好好拍了一些照片,连带……高速自动辅助驾驶2升级到3汽车,期待法规早日放开我是扬州上海每周来回的上班族,5年前我就买了新能源车,单趟260公里,一年油钱节省50260241万元,上下班就不算了。加速快(基本秒3050万的abb)令我最惊喜的功能……一加Nord2T规格曝光天玑1300芯片组50MP主摄80W稿源:cnBeta去年6月,一加向印度市场投放了Nord2智能机。最新消息是,Nord2T衍生机型或于45月份在国内率先上市。规格方面,据说该机配备了6。43英寸FHD分……
手机平板好搭档,雷柏XK100蓝牙键盘自带卡槽,支持多系统飞利浦音视频记录仪VTR8102,今日开售洪崖洞之夜太美魅族18拿下苏宁旗舰手机销量前三隐私安全白皮书明天见半导体需求助推增长台积电成亚洲市值最高公司助听器通道是怎么回事?阿里巴巴是怎么失去人心的?手机快速发展的时代,各位大佬对于购买手机有什么看法和推荐吗?想配一台5000左右的游戏主机,要机箱酷炫,的怎么配置?苹果iPhone已落后?这几款安卓手机更值得入手,你选对了吗STEPVR总裁郭成元宇宙要想进入下一个阶段,首先需要有能调在香港买iphone8p64G多少钱?
进入伴侣关系,需要这三个条件最新清明节扫墓主持稿代理模式介绍实现动态代理(JDKCGLIB)及对比【商会信息】不断深化商会数字化建设水平,商会数字化建设推进活 核辐射为什么全身溃烂怎么安装行车记录仪(车载大屏行车记录仪怎样安装)蜕变后的伟大你知道吗,中医说深恶痛绝的黄褐斑原来与肝郁有关婴幼儿不能多饮水果汁瓷器落款(民国瓷器底款简介)2021年骁龙888手机盘点推荐(上)婚姻的两种猜想开播,黄灿灿颠覆印象出演可爱小太妹

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁