JNI编程
聊聊JNI编程那些事儿,深入理解JNI编程。
TYYJ-洪伟
努力成为一名匠人。
展开
-
【JNI编程】JNI异常
Java中异常处理非常简单,我们直接在Java代码中try…catch…即可。假设使用JNI技术在native代码中调用Java方法,而这个Java方法有可能抛出异常,如何在JNI中进行异常处理呢?我们又想在JNI中抛出异常具体怎样操作?这些问题都会在JNI编码中进行涉及。一、API回顾1.1 Throwjint Throw(JNIEnv *env, jthrowable obj);导致...原创 2019-02-22 13:36:16 · 1619 阅读 · 0 评论 -
【JNI编程】JNI数组使用
我们经常遇到在native代码中处理数组的需求,JNI中数组的使用可以说是基本功。下面的例子演示了如何在JNI中获取数组的长度,JNI获取Java层的数组并使用等。一、涉及API1.1 GetArrayLengthjsize GetArrayLength(JNIEnv *env, jarray array);返回数组中元素的数量。LINKAGE:JNIEnv接口函数表中的索引171。...原创 2019-02-18 19:35:04 · 1828 阅读 · 0 评论 -
【JNI编程】JNI中进行线程同步
JVM可以做到在相同的地址空间内执行多个线程。由于多个线程可能会在同时共享资源,所以,增加了程序的复杂性。一、预备知识1.1 约束限制如果你的本地代码要运行在多个线程中,有一些约束条件需要注意,这样的话,才能使得你的本地代码无论被多少个线程同时运行,都不会出现问题。JNIEnv指针只在它所在的线程中有效,不能跨线程传递和使用。不同线程调用一个本地方法时,传入的JNIEnv指针是不同的。...原创 2019-02-01 09:02:18 · 1782 阅读 · 1 评论 -
【JNI编程】JNI中使用Linux本地线程
我们知道Android系统内核是使用Linux实现的,那么在Android OS中JNI实现的本地代码中实际使用的是Linux线程,这就需要pthread支持。一、涉及pthread方法Linux下用C开发多线程程序,Linux系统下的多线程遵循POSIX线程接口,称为pthread。头文件#include<pthread.h>1.1 pthread_createpthre...原创 2019-01-31 08:56:36 · 453 阅读 · 0 评论 -
【JNI编程】实现JNI的两种方法
通常来说我们使用JNI,Java层中对应的接口方法在本地代码中有对应的方法实现。一、通过动态链接器根据条目的名称解析通过动态链接器根据条目的名称解析条目。本地方法名称由以下组件连接而成:前缀Java_一个全限定类名下划线(" _ ")分隔符一个方法名对于重载的本地方法,两个下划线(“__”)后面跟着参数签名VM检查方法名与驻留在本地库中的方法是否匹配。VM首先查找短名称;即没有...原创 2019-01-31 08:55:41 · 868 阅读 · 0 评论 -
【JNI编程】深入理解JNI内存泄漏
JAVA 编程中的内存泄漏,从泄漏的内存位置角度可以分为两种:JVM 中 Java堆的内存泄漏和JVM 内存中 native memory 的内存泄漏。从操作系统角度看,JVM 在运行时和其它进程没有本质区别。在系统级别上,它们具有同样的调度机制,同样的内存分配方式,同样的内存格局。JVM 进程空间中,Java Heap 以外的内存空间称为 JVM 的 native memory。进程的很多资...原创 2019-01-30 09:09:27 · 1553 阅读 · 1 评论 -
【JNI编程】调用API
Invocation API允许软件供应商将JVM加载到任意本地应用程序中。供应商可以提供支持Java的应用程序,而无需链接JVM源代码。本章首先概述了Invocation API。接下来是所有Invocation API函数的参考页面。一、概述以下代码示例说明了如何在Invocation API中使用函数。在此示例中,C++代码创建JVM并调用静态方法,称为Main.test。为清楚起见,...原创 2019-01-30 09:07:32 · 513 阅读 · 0 评论 -
【JNI编程】JNI函数
本节作为JNI函数的参考部分。它提供了所有JNI功能的完整列表,还提供了JNI函数表的确切布局。请注意使用术语“必须”来描述对JNI程序员的限制。 例如,当您看到某个JNI函数必须接收非NULL对象时,您有责任确保不将NULL传递给该JNI函数。 因此,JNI实现不需要在该JNI函数中执行NULL指针检查。本节的一部分改编自Netscape的JRI文档。参考材料按其用法分组。参考部分由以下功...原创 2019-01-27 09:48:32 · 2028 阅读 · 0 评论 -
【JNI编程】JNI类型和数据结构
本节主要讨论JNI如何将Java类型映射到本地C类型。一、原始类型下表描述了Java基本类型及其依赖于机器的本地对等类型。Java类型本地类型描述booleanjbooleanunsigned 8 bitsbytejbytesigned 8 bitscharjcharunsigned 16 bitsshortjshortsigned 1...原创 2019-01-26 09:22:28 · 455 阅读 · 0 评论 -
【JNI编程】JNI中的主要设计
这里主要讨论JNI中的主要设计问题。本节中的大多数设计问题都与本地方法有关。一、JNI接口函数和指针本地代码通过调用JNI函数访问JVM特性。JNI函数通过接口指针可用。接口指针是指向指针的指针。这个指针指向一个指针数组,每个指针指向一个接口函数。每个接口函数在数组中都有一个预定义的偏移量。图2-1演示了接口指针的组织。JNI接口的组织方式类似于C++虚拟函数表或COM接口。使用接口表而不...原创 2019-01-25 17:02:29 · 347 阅读 · 0 评论 -
【JNI编程】启动篇
JNI是一个本地编程接口。它允许在Java虚拟机(VM)中运行的Java代码与用其他编程语言(如C、C++和汇编)编写的应用程序和库进行互操作。JNI最重要的优点是它不限制底层JVM的实现。因此,JVM供应商可以添加对JNI的支持,而不会影响JVM的其他部分。程序员可以编写本地应用程序或库的一个版本,并期望它与支持JNI的所有JVM一起工作。一、JNI综述虽然可以完全使用Java编写应用程序...原创 2019-01-25 16:59:31 · 301 阅读 · 0 评论