美文网首页
JNI(JNI概述)

JNI(JNI概述)

作者: 郝赫 | 来源:发表于2017-03-09 20:57 被阅读6次

一、JNI(Java Native Interface)

从图一(图片均为盗用)中可以看到Android上层的Application和ApplicationFramework都是使用Java编写,底层包括系统和使用众多的Libraries都是C/C++编写的。Dalvik VM(Dalvik本质上是一个针对低内存耗用而优化的Java虚拟机,允许运行多个VM实例,利用linux实现安全性和进程隔离)编译是google的Java实现,针对移动设备进行了优化,Dalvik VM运行.dex文件,编译时会将标准的.class和.jar文件转换为.dex文件。.dex文件比java类文件更加紧凑、高效。本质上JNI为上层直接调用底层的C/C++函数库。

图一

下面将学习Android是如何通过Jni来实现Java对C/C++函数的调用

1、什么是JNI:

JNI(Java Native Interface):java本地开发接口

JNI是一个本地调用协议,这个协议用来沟通java代码和外部的本地代码(c/c++)

外部的c/c++代码也可以调用java代码(相互之间的通信)

2、使用JNI的优点:

效率上 C/C++是本地语言,比java更高效

代码移植,如果之前用C语言开发过模块,可以复用已经存在的c代码

java反编译比C语言容易,一般加密算法都是用C语言编写,不容易被反编译

3、Java基本数据类型与C语言基本数据类型的对应(图二)

图二

4、引用类型对应(图三)

图三

5、堆内存和栈内存的概念

栈内存:系统自动分配和释放,保存全局、静态、局部变量,在站上分配内存叫静态分配,大小一般是固定的

堆内存:程序员手动分配(malloc/new)和释放(free/java不用手动释放,由GC回收),在堆上分配内存叫动态分配,一般硬件内存有多大堆内存就有多大

相关文章

网友评论

      本文标题:JNI(JNI概述)

      本文链接:https://www.haomeiwen.com/subject/fxjbgttx.html