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

Java 

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

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类型

Spring Cloud Alibaba Sentinel使用教程

Spring Cloud Alibaba Sentinel使用教程 什么是Sentinel Sentinel的github官网 Sentinel官网 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性

Spring Colud Alibaba Nacos微服务组件的使用教程

Spring Colud Alibaba Nacos微服务组件的使用教程 Nacos官网 什么是nacos Dynamic Naming and Configuration Service(动态命名和配置服务) nacos可以作为服务注册中心 nacos可以作为配置中心 nacos即支持AP也支持C

Spring Cloud Sleuth + Zipkin使用教程

Spring Cloud Sleuth + Zipkin使用教程 Sleuth官方文档 Sleuth提供了一套完整的服务跟踪的解决方案并兼容Zipkin Sleuth做链路追踪,Zipkin做数据搜集/存储/可视化 在分布应用中,存在服务之间的相互调用,在这里相互调用之间就形成了一条调用链路 一条链

SpringCloudGateWay网关组件使用教程

SpringCloudGateWay网关组件使用教程 Spring Cloud GateWay官方文档 使用的springcolud版本是 <dependency> <groupId>org.springframework.cloud</groupId>

Eureka服务注册与发现组件使用教程

Eureka服务注册与发现组件使用教程 服务注册与发现 负载均衡 远程调用 父模块的pom.xml配置 采用服务组件需要特别注意版本的关系,避免依赖冲突 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apach