一、本地方法栈
1. 概述
类比Java栈管理 Java 方法的调用和执行,本地方法栈管理本地方法的调用。
2. 线程安全性
3. 栈内存大小
运行被实现为内存固定大小和可扩展内存大小。(内存溢出方面是相同的)
- HotSpot虚拟机,本地方法栈(Native Method Stack)和虚拟机栈(Java Stack)合二为一。
并不是所有JVM都支持本地方法。 JVM规范没有明确要求本地方法栈的使用语言、具体实现方式、数据结构等。
二、本地方法接口
1. 概述
通过native关键字,不提供实现体,像是 Java 的 Interface 和实现类的关系,但实现体是其他语言编写。
- 其他语言也有一样的机制,比如C++中用【extern “c”】告知C++编译器去调用一个C的函数。
- 其他语言也有一样的机制,比如C++中用【extern “c”】告知C++编译器去调用一个C的函数。
- 作用是融合不同的语言为 Java 所用,初衷是融合 C / C++ 程序。
当某个线程调用一个本地方法时候,本地方法就不再受虚拟机限制。它和虚拟机拥有同样的权限。
与JVM之外的环境交互。
与操作系统交互。
Sun的解释器是用C实现的,使得它能像普通的C一样与外部交互。
Jre大部分是Java实现的,也通过一些本地方法与外界交互。
- java.lang.Thread#setProperty()通过C语言实现,但是调用Thread中的本地方法可以运行。
4. 本地方法库
1) 方法实现
本地方法的其他语言实现。2) 调用方式
可以通过Java类中的native方法定义去调用。3) 加载时机
在执行引擎执行时候加载本地方法库。5. 自定义本地方法
可以自定义本地方法,并且可以编译通过。 ```java /**
- 本地方法定义的演示类。
- native修饰的方法都没有方法体。
- native和abstract关键字不能同用。
- native和abstract关键字不能同用。
- a. native的方法实现体不是Java语言,但不表示没有。
- b. abstract方法是 虚方法 / 抽象方法。
*
- @author Jinhua
@date 2020/10/29 22:41 */ public class IHaveNatives {
public native void native1(int x);
native static public long native2();
native synchronized private float native3(Object o);
native void native4(int[] array) throws Exception; } ```
- java.lang.Thread#setProperty()通过C语言实现,但是调用Thread中的本地方法可以运行。