[last updated :2016/2/8] 未完成
在上一讲(1. JVM运行时数据区)Topic 1中简略谈到本地方法栈。本文将通过以下几个话题来进一步讨论本地方法栈。
- Topic 1. 本地方法栈的功能?
- Topic 2. 什么是本地方法?为什么要使用本地方法?
- Topic 3. 本地方法是如何工作的?
- Topic 4. 怎样使本地方法在JVM中跑起来?
Topic 1. 本地方法栈的功能?
为线程私有,功能和虚拟机栈非常类似。线程在调用本地方法时,来存储本地方法的局部变量表,本地方法的操作数栈等等信息。
Topic 2. 什么是本地方法?为什么要使用本地方法?
简单地讲,一个本地方法是这样一个方法:该方法的实现由非java语言实现,比如C语言实现。很多其它的编程语言都有这一机制,比如在C++中,你可以告知C++编译器去调用一个C语言编写的方法。
我们知道java是高级编程语言,当对一些底层的如操作系统或某些硬件交换信息时,我们使用java来编程实现起来不容易,再者使用java来编程效率也很低下。这就不得不需要调用本地方法来解决这一问题。
Topic 3. 本地方法是如何工作的?
就是当一个线程调用一个本地方法时,本地方法又回调虚拟机中的另一个Java方法。这幅图展示了java虚拟机内部线程运行的全景图。一个线程可能在整个生命周期中都执行Java方法,操作他的Java栈;或者他可能毫无障碍地在Java栈和本地方法栈之间跳转。
该线程首先调用了两个Java方法,而第二个Java方法又调用了一个本地方法,这样导致虚拟机使用了一个本地方法栈。图中的本地方法栈显示为 一个连续的内存空间。假设这是一个C语言栈,期间有两个C函数,他们都以包围在虚线中的灰色块表示。第一个C函数被第二个Java方法当做本地方法调用, 而这个C函数又调用了第二个C函数。之后第二个C函数被第二个Java方法当做本地方法调用,而这个C函数又调用了第二个C函数。之后第二个C函数又通过 本地方法接口回调了一个Java方法(第三个Java方法)。最终这个Java方法又调用了一个Java方法(他成为图中的当前方法)
![https://i-blog.csdnimg.cn/blog_migrate/67b1411afbc0651f6eb72324cfcb6dc1.jpeg](https://i-blog.csdnimg.cn/blog_migrate/67b1411afbc0651f6eb72324cfcb6dc1.jpeg)