这里摘自一篇博客:如果一个方法描述符中有native,那么描述符块中就会有一个指向该方法实现的指针。这些实现在一些DLL文件中,但是它们会被操作系统加载到java程序的地址空间中。当加载具有本机方法的类时,不会加载其关联的DLL,因此不会设置指向方法实现的指针。这些DLL在调用本地方法之前加载,这是通过调用java.system.loadLibrary()实现的。上面一段是原作者翻译的,感觉有点不清楚:前面说了'一个带有native...的方法描述符会被加载到java程序的地址空间',后面又提到了'DLL尚未加载...在调用本机方法之前不会加载DLL'。DLL文件是在编译时加载还是在运行时加载还不确定。估计是运行时加载的---有空再找找相关资料。另外,当需要调用原生API时,比如反射、安全检查、访问控制等操作都会进行,所以性能会比较低。毕竟编译时做的事情,运行时也会做,所以如果真的使用反射,尽量Cache一些元数据(比如获取的方法、构造函数等)。文章摘录:Java的原生方法
