JVM内存结构-本地方法栈

Java虚拟机内存结构中,本地方法栈为本地方法服务,存储执行所需参数。与Java虚拟机栈类似,但为非Java语言(如C、C++)编写的本地方法提供支持。本地方法通过JNI接口被Java调用,调用时不会创建新的栈帧,而是直接在操作系统中执行。在Java代码中,如object类的某些native方法,即展示了这种调用方式。
摘要由CSDN通过智能技术生成

        Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域,分别是:程序计数器(PC)、Java虚拟机栈(VMS)、本地方法栈(NMS)、Java堆(Heap)、方法区(MA)。其中方法区中有一个比较重要的区域叫做运行时常量池。其中程序计数器、虚拟机栈和本地方法栈都是线程独有的,而堆和方法区是线程之间共有的。

1.本地方法栈

        本地方法栈与 Java 虚拟机栈类似,它们之间的区别只不过是本地方法栈为本地方法服务,保存的是本地方法要执行所需的必要参数。Native方法一般是用其它语言(C、C++ 或汇编语言等)编写的,并且被编译为基于本机硬件和操作系统的程序,对待这些方法需要特别处理。Native方法执行是在os中执行的,并非在JVM中执行的,所以使用的是os的程序计数器而非JVM的程序计数器。本地方法栈只是存储了线程要运行这个方法的必要信息,比如出口,入口,动态链接,局部变量表,操作数栈等。 

        Native方法是 Java 通过 JNI 直接调用本地 C/C++ 库,可以认为是 Native 方法相当于 C/C++ 暴露给 Java 的一个接口,Java 通过调用这个接口从而调用到 C/C++ 方法。当线程调用 Java 方法时,虚拟机会创建一个栈帧并压入 Java 虚拟机栈。然而当它调用的是 native 方法时,虚拟机会保持 Java 虚拟机栈不变,也不会向 Java 虚拟机栈中压入新的栈帧,虚拟机只是简单地动态连接并直接调用指定的 native 方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值