本文主要是介绍Java杂谈来一发(一)Java本地方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、Java本地方法概念
Java中的方法分为两种:Java方法和本地方法。
Java方法由Java语言编写,编译成字节码,存储在.class文件中。
本地方法由其他语言编写,编译成与处理器相关的机器代码,本地方法保存在动态链接库(如ddl中)。
本地方法的存在的意义,主要在于Java应用需要与JVM进行交互,当Java需要与操作系统或者某些硬件交换信息时,就需要用到本地方法。使用JNI能让Java与本地语言交互,但也意味着丧失了跨平台性。
2、Java本地方法调用原理
JNI(Java Native Interface)是Java调用非Java方法的入口。理解JNI可以从虚拟机层面来看,JVM主要使用C/C++和少量汇编实现,执行Java字节码时如果遇到Native方法,则从JVM中寻找对应的C/C++函数,对应的函数会被注册到JVM中。
执行过程如下:
(1)Java通过 System.loadLibrary
方法
加载动态库,该方法内调用 ClassLoader
.loadLibrary
方法,加载时通过系统设置的绝对路径或特定目录下寻找动态库。
(2)对于linux,通过dlopen函数打开动态库,加载到内存中,再通过dlsym函数获取动态库中的函数指针,然后调用到特定函数。
简单说,就是JVM负责将动态库加载到内存,Java执行引擎执行到本地方法时找到对应的函数,完成本地方法的调用。
参考文章:
https://blog.csdn.net/wi__wi/article/details/51085907
https://blog.csdn.net/wangyangzhizhou/article/details/74931733
这篇关于Java杂谈来一发(一)Java本地方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!