- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C04_a
基於軟硬整合觀點
JNI :必要的优化设计(a)
By 高煥堂
內容
1. 创建C++类的对象
2. 优化目的:维护本地函数的稳定性
3. 静态对静态,动态对动态原则
4. Java与C++对象之间的单向对称关连
5. Java与C++对象之间的双向对称关连
基於軟硬整合觀點
1 、创建C++类的对象
• 在JNI 的C模块里,不仅能创建Java层的对
象,也可以创建C++类别的对象,如下图:
• 上图的JNI接口层是以C语言实作的本地函
数。
• 在逻辑上,这些C函数仍属于Java类(即定
义In 的类) 。
• 典型的架构共分为三个层级:Java层、C层
和C++层;其间可以互相沟通与合作。
• C和C++代码可以摆在同一个*.so档案里。
• 多个Java类的C函数(即多个In的实现代码)可
以摆在同一个*.so档案里。
n
n
n
n
n
/* com.misoo.counter.Counter.c */
// …….
JNIEXPORT void JNICALL
Java_com_misoo_counter_CounterNative_nativeSetup
(JNIEnv *env, jobject thiz) { // ……. }
JNIEXPORT jobject JNICALL
Java_com_misoo_counter_actNative_nativeExec
(JNIEnv *env, jclass clazz) { // …… }
}
2 、优化目的:
基於軟硬整合觀點
维护本地函数的稳定性
• 不宜仰赖C层的*.so的全局变量来储存Java层或
C++层的对像(指针或参考) 。
• 依赖C层(全局或静态变量)来储存C++对象指针,
或者储存Java层对象参考,这常常让C层模块与特
定C++对象或Java对象绑在一起,产生紧密的相
依性,导致系统弹性的下降。
• 本节的范例将以优越的设计化解这项困境。
/* com.misoo.counter.Counter.c */
// ……
jobject m_object, m_rv_object ;
JNIEXPORT void JNICALL
Java_com_misoo_counter_CounterNative_nativeSetup
(JNIEnv *env, jobject thiz) {
jclass clazz = (*env)-GetObjectClass(env, thiz);
m_object = (jobject)(*env)-NewGlobalRef(env, thiz);
// ……
jclass rvClazz = (*env)-FindClass(env,
com/misoo/counter/ResultValue);
jobject ref = (*env)-NewObject(env, rvClazz, constr);
m_rv_object = (jobject)(*env)-NewGlobalRef(env, ref);
}
/* com.misoo.counter.Counter.c */
jobject m_ob
您可能关注的文档
- Android从程序员到架构师之路-B06_b_活用IBinder接口于近程通信.pdf
- Android从程序员到架构师之路-B07_b_Messager框架与IMessager接口.pdf
- Android从程序员到架构师之路-B07_c_Messager框架与IMessager接口.pdf
- Android从程序员到架构师之路-C01_a_JNI架构原理_Java与C的对接.pdf
- Android从程序员到架构师之路-C01_e_JNI架构原理_Java与C的对接.pdf
- Android从程序员到架构师之路-C01_d_JNI架构原理_Java与C的对接.pdf
- Android从程序员到架构师之路-C02_c_认识JNI开发与NDK.pdf
- Android从程序员到架构师之路-C02_b_认识JNI开发与NDK.pdf
- Android从程序员到架构师之路-C02_e_认识JNI开发与NDK.pdf
- Android从程序员到架构师之路-C03_e_JNI_从C调用Java函数.pdf
- 浙江金华市公共资源交易中心永康市分中心编外人员招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波慈溪市政协办公室招考聘用编外工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江金华永康市西溪镇人民政府招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 福建南平市公安局建阳分局招考聘用辅警笔试历年典型考题及考点研判与答案详解.docx
- 浙江嘉兴海盐县武原街道基层残疾人工作专职委员(公益岗位)招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 浙江宁波知识产权保护中心招考聘用工作人员笔试历年典型考题及考点研判与答案详解.docx
- 浙江杭州建德市面向2024届普通高校毕业生招考聘用教师(第二批)16人笔试历年典型考题及考点研判与答案详解.docx
- 浙江省台州中学面向2024届普通高校毕业生招考聘用教师12人笔试历年典型考题及考点研判与答案详解.docx
- 湖北师范大学体育学院专任教师招考聘用笔试历年典型考题及考点研判与答案详解.docx
- 重庆市南岸区教育事业单位面向2024届高校毕业生招考聘用114人笔试历年典型考题及考点研判与答案详解.docx
最近下载
- 手术室实践指南之手术病人意外伤害预防护理课件.pptx
- 医学媒介生物基础知识及国境口岸病媒生物监测.ppt
- java图书管理系统[].doc VIP
- 软件测试实验白盒测试.doc VIP
- 2023年副高(超声医学与技术)考试真题卷(含答案)M9D4.docx
- 营商的法律智慧:商法(暨南)中国大学MOOC慕课 章节测验期末考试答案.docx
- 初中创意编程课程《用Microbit玩转声音——Microbit用音乐模块编制音乐演奏程序》课件.pptx VIP
- 《土方与爆破工程施工及验收规范》GB50201-2012.docx
- 未来工厂建设导则(发布稿)(0723).pdf
- 《大气辐射学》期末复习试题及答案.pdf
文档评论(0)