JNI第三期:JNI中的三种引用类型

Java 

本文详细介绍了 JNI(Java Native Interface)中的三种引用类型:局部引用(Local Reference)、全局引用(Global Reference)和弱全局引用(Weak Global Reference)。通过对比表格清晰展示了它们在生命周期、跨线程能力、对垃圾回收的影响、创建与释放方式及主要用途上的区别。文章结合具体代码案例,演示了每种引用的使用方法、跨线程访问的可行性,并验证了其在 JVM 中的行为,如局部引用自动回收、全局引用需手动释放且不会被 GC、弱引用在内存紧张时会被回收等特点。
JVM内存布局

JVM内存布局

JVM的内存布局和相关的概念

Java 

JNI第二期:JNI(Java Native Interface)的参数传递和返回

Java 

JNI(Java Native Interface)是Java与本地代码(C/C++)交互的桥梁,支持参数传递和返回值处理。其核心包括数据类型映射、类型签名表示以及基本类型与对象类型的操作方法。 Java基本数据类型在JNI中通过添加前缀“j”映射到对应的本地类型,如`int`映射为`jint`,`boolean`映射为`jboolean`。对象类型统一用`jobject`表示。JNI使用类型签名来标识Java数据类型,例如`int`的签名是`I`,`java.lang.String`的签名是`Ljava/lang/String;`,方法的签名则结合参数和返回类型,如`int sum(int, int)`的签名为`(II)I`。 基本类型可以直接在Java和本地代码间传递和转换。对象类型的操作则类似于Java反射机制,需要获取类、方法或字段的句柄(如`jclass`、`jmethodID`),并通过JNI函数创建、访问或修改对象。对于在本地代码中创建的对象,若需在Java中持续使用,应通过`NewGlobalRef`创建全局引用,并在使用后通过`DeleteGlobalRef`释放,以避免内存泄漏。 通过具体案例展示了基本类型(如整数求和、布尔值转换)和对象类型(如创建`Student`对象并设置属性)的交互实现,包括本地方法的编写、编译为动态链接库及在Java中调用的完整流程。

JNI第一期:Java的JNI入门HelloWorld

Java 

本文档介绍了 Java JNI (Java Native Interface) 的入门教程,通过一个 HelloWorld 示例演示了如何在 Java 中调用 C/C++ 本地方法。核心流程包括:用 native 关键字声明本地方法并加载动态链接库;通过 javac -h 命令生成 JNI 头文件;实现头文件中定义的 C 函数;最后编译为共享库并运行。文档还详细说明了头文件和方法命名的转换规则,以及静态方法和实例方法在 JNI 函数签名中的参数区别(分别为 jclass 和 jobject)。

JAVA新一代NIO模型学习记录

Java 

JAVA新一代NIO模型学习记录 NIO的三大组件是:Buffer、Channel、Seclector 缓冲区buffer 在NIO中数据的读写是按块进行读写,每一个buffer代表一个数据块 基本使用 Java的八大数据类型中,除了boolean类型外,都有对应的Buffer类型,例如:int类型

C语言的编译预处理


编译预处理 预处理指令主要有三种 包含文件:将文件以"#include"格式包含的文件复制到源文件中,可以是头文件,也可以是其他程序文件 宏定义指令:#define定义一个宏,#undef指令删除一个宏定义 条件编译:根据**#ifdef和ifndef**后面的条件决定需要编译的代码 包含文件指令(

C语言中的时间日期操作


时间操作 结构体定义 tm 结构体 tm 结构体用于存储日期和时间信息,定义如下: struct tm { int tm_sec; // 秒,取值范围 [0,59] int tm_min; // 分钟,取值范围 [0,59] int tm_hour; // 小

C语言中的结构体


结构体 包含头文件 #include <stdio.h> #include <string.h> #include <stdlib.h> 结构体定义 定义一个结构体 superGirl,用于存储超女的信息。 结构体的属性不能有初始值 struct superGirl { char name

C语言中的字符串


字符串 字符串是特殊的字符数组,数组的结尾字符为'\0' 需要多出一位长度保存字符串的结尾标志 包含头文件 #include <stdio.h> #include <string.h> 字符串的声明与初始化 直接赋值和通过函数拷贝赋值。 char str[128] = "字符串是以转义字符\"\\

C语言中的浮点数


浮点数 包含头文件 #include <stdio.h> #include <stdlib.h> #include <math.h> // 包含数学函数库 浮点数类型大小 打印不同浮点数类型的大小。 // 各种浮点数类型的占用空间大小 // 4 byte printf("f