教程 | 入门纯手写JNI编译与使用(适合做demo)

本文深入讲解Java Native Interface(JNI)的使用,从环境搭建到C代码实现,再到动态链接库生成,最后完成Java调用C代码的过程。适合对Java底层感兴趣的开发者阅读。

前言

做开发的,喜欢看源码的同学,肯定会遇到native关键词,接着就会卡在这里进行不下去,因为native对应的代码就是C了,如果要看再底层的代码,就之只能上官网要C层面的代码了。
2年前,笔者开发过JNI(Java Native Interface),java和C都要实现,这里拿出了笔者多年前的笔记,加点润色说明(貌似也没润多少),希望对大家有所帮助。
目标:

  1. 理解native是什么?
  2. 自己如何实现jni调用?

了解什么是native

我们在学习JVM运行数据区的时候,会了解到虚拟机栈和本地方法栈,我自己做笔记、画图做总结的时候,喜欢把这两个划分到一块,这里可以参考下面的图。
JVM运行数据区

那么JNI是什么?为什么会有native关键词?

JNI(Java Native Interface)调用属于线程私有,用于本地方法的运行,一个Native Method就是一个java调用非java代码的接口,一般来说就是C实现了。

为什么需要Java调用C实现?

有时候Java不能提供的功能(例如类加载机制中,bootstrap的作用是加载加载$JAVA_HOME/jre/lib/下核心类库,如rt.jar,而底层源码hotspot,jvm中是由C++实现),或者是由C来处理更方便更快,那么就需要native方法。
java中bootstrap加载核心类,底层源码可以参考查看: jdk8-hotspot,个人认为,有时候看看底层源码,又能理解出一些新知识,有能力的可以多看看。

正片:一个demo

1.准备好环境

准备好JDK,安装好JDK,配备好环境(这里就不加累述)

2.手打一个JNI的java文件

创建一个TestJNI.java文件:
1)vim TestJNI.java
2)按 i 编写(编写了加载so文件的加载路径,与对应的native方法)
3)按ESC键,:wq! 保存退出
手打JNI的Java环境

public class TestJNI {
   
   
	public static native void printTest(String content);
	static 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值