1.1本地方法栈

来源:互联网 发布:淘宝百阅街怎么下载 编辑:程序博客网 时间:2024/05/18 20:47

[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方法(他成为图中的当前方法)

http://dl2.iteye.com/upload/attachment/0057/8323/8859852a-04cf-3ad1-871f-3f9126741580.jpg

Topic 4. 怎样使本地方法在JVM中跑起来?


1 1
原创粉丝点击