首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Object类中的registerNatives方法的作用深入介绍

所以,显然,当包含registerNatives()方法的类被加载的时候,注册的方法就是该类所包含的除了registerNatives()方法以外的所有本地方法。详见参考博文3。        ...书中还总结了使用registerNatives()方法的三点好处: 通过registerNatives方法在类被加载的时候就主动将本地方法链接到调用方,比当方法被使用时再由虚拟机来定位和链接更方便有效;...举个例子,我们在Object中定义的本地方法registerNatives,那这个方法对应的本地方法名就叫Java_java_lang_Object_registerNatives,而在System类中定义的...registerNatives方法对应的本地方法名叫Java_java_lang_System_registerNatives等等。...这个问题涉及到registerNatives()的底层C++源码实现,有兴趣可以阅读参考博文3和5,建议先看5,再看3,因为5介绍了如何使用registerNatives方法注册本地方法,而3介绍了registerNatives

30450
您找到你想要的搜索结果了吗?
是的
没有找到

分析 JDK 源码丨Java Object

任何对象直接或间接的跟 Object 对象有关 ---- Object 类源码中的关键方法 public class Object { private static native void registerNatives...(); static { registerNatives(); } ··· } registerNatives():注册本地方法 它会注册除 registerNatives...在类被加载时就调用 registerNatives() 的用意是此时是程序主动将本地方法链接到调用方,当 java 程序需要调用本地方法时可直接调用,省去了jvm再去定位并链接的这一步,这样做的好处是:...更加方便且提高了执行效率 当本地方法在程序运行中有更新,调用 registerNatives() 可及时实现更新 Java程序需要调用一个本地应用提供的方法时,因为虚拟机只会检索本地动态库,因而虚拟机是无法定位到本地方法实现的...,这个时候就只能使用 registerNatives() 进行主动链接 通过 registerNatives() 在定义本地方法的实现时,可以不遵守 JNI 的命名规范 ··· public

40520

Android so的热升级尝试

在以上流程中,使用dlopen加载so之后,会继续调用JNI_Onload函数,通过系统提供的RegisterNatives函数完成一些列初始化,向虚拟机注册so库提供的JNI函数。...而接下来的RegisterNatives由于没有对应的unRegister,我们暂且先放一放,看看卸载的效果再来处理。...这时候就需要我们之前忽略的RegisterNatives登场了,这个函数可以用来手动注册JNI函数地址。...(env, clazz, gMethods, numMethods) < 0) { return JNI_FALSE; } return JNI_TRUE; } 使用RegisterNatives注册后...本篇小结 如果想要在运行时更新so,则新的so文件必须要实现JNI_Onload函数,并且在JNI_Onload中调用系统提供的RegisterNatives注册所有的JNI函数,不能使用自动查找JNI

1.4K20

JNI动态注册native方法及JNI数据使用

JVM 查找 native 方法 JVM 查找 native 方法有两种方式: 按照 JNI 规范的命名规则 调用 JNI 提供的 RegisterNatives 函数,将本地函数注册到 JVM 中。...是不是感到特别的意外,jni还能够利用RegisterNatives 函数查找native方法,其实我也才刚刚知道有这方法,因为要根据包名类名方法名的规范来写是很傻逼的,哈哈,有的人或许觉得这样很直观。...第一个参数:JNIEnv* 是定义任意 native 函数的第一个参数(包括调用 JNI 的 RegisterNatives 函数注册的函数),指向 JVM 函数表的指针,函数表中的每一个入口指向一个...是不是感觉一个方法的名字太长非常的蛋疼,然后我们呢直接使用,RegisterNatives来自己命名调用native方法,这样是不是感觉好多了。...demo 传送梦:RegisterNatives.rar JNI数据类型及常用方法(JNI安全手册) 基本类型和本地等效类型表: ? 引用类型:  ?

1.2K60

Android so的热升级尝试

而接下来的RegisterNatives由于没有对应的unRegister,我们暂且先放一放,看看卸载的效果再来处理。...这时候就需要我们之前忽略的RegisterNatives登场了,这个函数可以用来手动注册JNI函数地址。...让我们重复与第一节文字相似但含义不同的这段话: 在以上流程中,so库在使用dlopen加载后,还需要调用JNI_Onload函数,通过系统提供的RegisterNatives函数完成一些列初始化,向虚拟机注册新的...[gm2rXUV.png] 使用RegisterNatives注册后,即使so的地址发生变化,也能够更新虚拟机中记录的函数地址。...[Ir8RGSx.png] 本篇小结 如果想要在运行时更新so,则新的so文件必须要实现JNI_Onload函数,并且在JNI_Onload中调用系统提供的RegisterNatives注册所有的JNI

1.6K00

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券