part_c_掌握api和控制点从java到jni接口c04_a_jni_必要的优化设计_ok_第1页
part_c_掌握api和控制点从java到jni接口c04_a_jni_必要的优化设计_ok_第2页
part_c_掌握api和控制点从java到jni接口c04_a_jni_必要的优化设计_ok_第3页
part_c_掌握api和控制点从java到jni接口c04_a_jni_必要的优化设计_ok_第4页
part_c_掌握api和控制点从java到jni接口c04_a_jni_必要的优化设计_ok_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论