首页 > 技术文章 > 本地方法栈(Native Method Stack)

tang321 2021-04-23 13:04 原文

本地方法
一个Native Method就是一个Java调用非Java代码的接口。
Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java特有,很多其他的编程语言都有这一机制,比如在C++中可以用 extern "C" 告知C++编译器去调用一个C的函数
本地方法接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序

标识符native可以与其他的Java标识符连用,但是abstract除外

 

为什么要使用Native Method?
与Java环境外交互:有时Java应用需要与Java外面的环境交互,这是本地方法存在的主要原因。例如Java需要与一些底层系统如操作系统或某些硬件交换信息时的情况。本地方法正是这样一种交流机制:它为我们提供一个非常简洁的接口,而且我们无需去了解Java应用之外的繁琐的细节。
与操作系统交互:JVM由一个解释器(解释字节码)和一些连接到本地代码的库组成。然而不管怎样,它毕竟不是一个完整的系统,经常依赖于一些底层系统的知识,这些底层系统常常是强大的操作系统。通过使用本地方法,我们得以用Java实现jre与底层系统的交互,甚至JVM的一部分就是用C写的
Sun's Java:Sun的解释器是用C实现的,这使得它能与外部交互,jre大部分是用Java实现的,它也通过一些本地方法与外界交互

现状
目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机或Java系统管理生产设备,在企业级应用中已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等等

 

本地方法栈

Java虚拟机栈用于管理Java方法的调用,本地方法栈用于管理本地方法的调用
本地方法栈也是线程私有的
具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载本地方法库

 

当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界,它和虚拟机拥有同样的权限
本地方法可以通过本地方法接口来访问虚拟机内部的运行时数据区

推荐阅读