JVM中Native理解以及对方法区的一些简单理解
1、native关键字的理解
我们先来看一段代码:
public class Native {
public static void main(String[] args) {
new Thread(()->{
},"my Thread").start();
}
private native void start0();
}
我们发现在这个类里面定义了一个方法:private native void start0();
,这个方法就和在接口和抽象类里面定义方法一样,是没有方法体的,但是能在类里面定义,原因是加了一个native
关键字,如果去掉该关键字的话,该方法就会报错。
那么这个方法的含义是什么呢?凡是带了native关键字的方法,说明代码想要实现的功能java以及实现不了了(比如调用打印机,因为java不是能和硬件交互的语言),java的作用范围达不到,然后会去调用底层c语言的库实现我们想要完成的但仅仅靠java完成不了的功能。
调用流程流程如下:
- 用native修饰的方法会进入本地方法栈
- 然后在本地方法栈中调用本地方法接口,即JNI去加载本地方法库中的c语言等第三方库。
- 第三方库执行相应的方法实现相应的功能。
JNI的作用:扩展Java的使用,融合不同编程语言为Java所用!最初的时候,本地方法库中只有c/c++的库,因为Java诞生的时候,c和c++横行,想要立足的话,必须能够调用c和c++的程序。现在我们可以通过自定义JNI来实现调用其他语言。
JVM在内存区域中专门开辟了一块标记native方法的区域:Native Method Stack,用来登记native方法。
在最终执行的时候,加载本地方法库中的方法通过JNI。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)