前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >建立java和jin函数之间的关系

建立java和jin函数之间的关系

作者头像
北洋
发布2022-05-06 15:33:21
5480
发布2022-05-06 15:33:21
举报
文章被收录于专栏:北洋csdn

如何建立java和jin函数之间的关系:

1.静态注册:

借助于javah工具,该工具会在编译时对每个class文件中声明了native的函数输出一份。h头文件,在头文件中定义了这些函数对应的jni层的函数指针。

流程:

当java调用native的函数时,会在头文件中寻找对应的jni函数指针,然后进行保存起来映射关系。 也就是编译为每个class生产一份h头文件,头文件中存储对应java方法的native函数指针,在运行时调用jni函数时,进行查找对应的函数指针运行,接着进行关系映射缓存起来下次进来找到对应的直接运行指针即可。

缺点:

编译时需要为每个class生产一份h头文件,第一次使用时还需要先去头文件中查找才能运行。虽说后面会快有缓存

2.动态注册:

顾名思义,上面建立缓存是在第一次加载后才会建立映射。如果我们能够提前知道java中的函数对应的是哪个jni函数那么久不需要上面那么麻烦的过程了(先编译生产头文件,运行时在找在确定函数指针;

而loadlibrary函数调用时会去首先寻找so库中的load函数,我们可以在这个函数中进行java函数和native函数指针绑定的过程。

java函数名称,签名信息,jni层对应函数指针,属于哪个类的java函数。知道这些信息将其注册到一个映射表中。

后期运行时根据函数名称签名信息所属类就可以找到对应的jni函数指针

区别

一个是运行时生产在so库加载的时候就进行映射。java和对应jni函数的关系存储到表中。这种由于不需要根据java方法名来找jni函数名因此其jni函数可以更简洁。

一个是先造编译时定义jni函数指针,之后运行时根据函数信息在找在缓存映射运行,因为后期要根据java方法名称来找对应jni函数的指针,所以jni函数的定义要和java方法对应。类名-方法名会很长。而且编译时会生产很多h头文件进行存储这些超长名字的jni函数指针我,所以不是很优雅。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何建立java和jin函数之间的关系:
  • 1.静态注册:
    • 流程:
      • 缺点:
      • 2.动态注册:
        • 区别
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档