在研究源码的过程中,有很多类都存在registerNatives方法,Class,ClassLoader,Object 等等类都存在这个方案,而且这个方法还是native 的?

private static native void registerNatives();
static {
registerNatives();
}

后面找了一下资料基本明白他是做什么的了。

Java程序要想调用本地方法,需要执行两个步骤:

  • 第一,通过System.loadLibrary()将包含本地方法实现的动态文件加载进内存;
  • 第二,当Java程序需要调用本地方法时,虚拟机在加载的动态文件中定位并链接该本地方法,从而得以执行本地方法。

registerNatives()方法的作用就是取代第二步,让程序主动将本地方法链接到调用方,当Java程序需要调用本地方法时就可以直接调用,而不需要虚拟机再去定位并链接。