版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C04_aJNI:必要的优基化於軟硬设整合计觀點(a)By 高煥堂內容1. 创建C+类的对象2. 优化目的:维护本地函数的稳定性3. 原则4. Java与C+对象之间的对称关连5. Java与C+对象之间的对称关连1、创建C+基类於軟硬的整合对觀點象 在JNI的C模块里,不仅能创建Java层的对 象,也可以创建C+类别的对象,如下图: 上图的JNI接口层是以C语言实作的本地函数。 在逻辑上,这些C函数仍属于Java类(即定义的类) 。 典型的架构共分为三个层级:Java层、C层和C+层;其间可以互相沟通与合作。C和C+代码可以摆在同一个*.so里。多个Java类的C函数(即多个的实现代码)可以
2、摆在同一个*.so里。nnnnn/* com.misoo.counter.Counter.c */ .JNIEXPORT void JNICALLJava_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
3、层或C+层的对像(指针或参考)。依赖C层(全局或静态变量)来储存C+对象指针, 或者储存Java层对象参考,这常常让C层模块与特定C+对象或Java对象绑在一起,产生紧密的相依性,导致系统弹性的下降。本节的范例将以优越的设计化解这项困境。/* com.misoo.counter.Counter.c */ jobjectJNIEXPORT void JNICALLJava_com_misoo_counter_CounterNative_nativeSetup (JNIEnv *env, jobject thiz) jclass clazz = (*env)-GetObjectClass(env,
4、 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);m_object, m_rv_object ;/* com.misoo.counter.Counter.c */jobjec
5、tm_object, m_rv_object ;JNIEXPORT void JNICALLJava_com_misoo_counter_CounterNative_nativeSetup (JNIEnv *env, jobject thiz) / ./. 由于ResultValue对象是在run-time时期动态创建的,如果有多个对象时,该如何储存呢? 如果多个Java线程并行地(Concurrently)执行这个本地函数,共享了m_object和m_rv_object变量,如何确保线程之间不互相冲突呢? C层的全局或静态(static)变量只适合储存静态的数据,例如methodID或fieldID值。/* com.misoo.counter.Counter.c */jfieldIDm_fid;JNIEXPORT void JNICALLJava_com_misoo_counter_CounterNative_nativeSetup (JNIEnv *env, jobject thiz) / ./.m_fid = (*env)-GetFieldID(env, clazz, numb, I); 这m_fid储存的是类的属性ID,静态对静态关系,是合理的。 Java层的每一个CounterNative类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 急性胃炎发病诱因与急救护理
- 新能源出力预测服务赋能虚拟电厂:重构辅助服务价值链条
- 2026年AI 智能健康监测穿戴设备商业计划书
- 智能合页2.0时代:从机械连接到人机交互感知的范式跃迁
- 高层建筑消防应急疏散演练方案
- B2B内容营销:白皮书与案例研究的高转化写作技巧
- 养老院失火逃生演练实操手册
- 区块链技术在农产品溯源体系中的应用前景评估
- 2024年承德技师学院双滦高职部单招职业技能考试模拟试卷及完整答案详解(名师系列)
- 2024年陕西国防工业职业技术学院高职单招职业适应性测试考试题库(原创题)附答案详解
- 2026年内蒙古高考(化学)真题试卷带答案
- 蓬溪县国有资产监督管理局 面向社会公开招聘国有企业工作人员的(10人)考试备考题库及答案详解
- 绍兴市城市发展集团有限公司招聘考试笔试试题
- 2026年招标采购从业人员《招标采购专业实务(初级)》考试真题(附答案解析)
- 2026烟台辅警笔试题库
- 上海市河道维修养护管理技术规程
- 2026年高考全国二卷英语考试题目及答案
- 2026金华兰溪市机关事业单位编外招聘20人笔试参考题库及答案解析
- 2025年华东政法插班生笔试及答案
- 精神科患者噎食应急预案演练脚本
- 塔吊安装、使用、拆卸监理实施细则
评论
0/150
提交评论