Jna全称Java Native Access,是一个建立在 经典的JNI技术之上的Java开源框架。项目会自动生成示例代码,只需关注DllExportTest.h和DllExportTest.cpp文件就可以了。
不同的开发语言适合不同的领域,例如Python适合做数据分析,C++适合做系统的底层开发,假如它们需要用到相同功能的基础组件,组件使用多种语言分别开发的话,不仅增加了开发和维护成本,而且不能确保多种语言间在处理效果上是一致的。
Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分。即使Java程序也可能有错误,如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。
JavaCPP 使得Java 应用可以在高效的访问本地C++方法,JavaCPP底层使用了JNI技术,可以广泛的用在Java SE应用中,以下两个特性是JavaCPP的关键,稍后咱们会用到:提供一些注解,将Java代码映射为C++代码。
先来看看 java.lang.reflect.Method 里的 invoke 方法:在关闭了Inflation的情况下,内联的瓶颈在于 Method.invoke 方法中对 MethodAccessor.invoke 方法的调用,如下图所示:
CAS即Compare And Swap的缩写,翻译成中文就是比较并交换,其作用是让CPU比较内存中某个值是否和预期的值相同,如果相同则将这个值更新为新值,不相同则不做更新,也就是CAS是原子性的操作,其实现方式是通过借助C/C++调用CPU指令完成的,所以效率很高。