您的位置:首页 > 编程语言 > C语言/C++

java语言和C/C++语言的关系

2015-08-21 16:14 239 查看
以下是自己的一些个人理解,不一定正确。

java语言是基于C语言写的,也就是说java语言的核心库的本地实现是C和C++语言实现的,最终还是调用了Libc库。libc再往下就是内核。

android的应用程序,由java编译.class再编译成.dex。dex再由虚拟机来解释成CPU认识的二进制,这些二进制直接放在了内存中。虚拟机在解释的过程中会去走系统调用。这就形成了java语言间接的走

系统调用这一步。java语言想要调用C/C++,必须经过JNI这种机制,

而虚拟机在解释dex时,解释到jni这种写法时,会去调用C和C++。也即是说jni这种机制是虚拟机来解释的。

具体就是.dex去调用system/lib/下的*_jni.so时,是jni来实现的,而虚拟机认识这种关系。*_jni.so已经是二进制了。*_jni.so在生成时去链接了libc.so。

之所以虚拟机知道把dex解释成MIPS的二进制指令,使用为虚拟机是之前已经被MIPS的相应工具链编译了。

android5.1 有libcore目录,存放了android的核心库,这个目录中的java部分最终被打包为core.jar包。经过安装放在了目标目录的system/framework/下。libcore中的C/C++ 代码被编译为libjavacore.a静态库,这个库是java核心库的本地代码。也就是说android的核心库是由java的核心库和java核心库的本地代码C/C++组成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: