本地方法栈 Native Method Stacks
需求: java代码有限制,有时候不能直接和底层操作系统交互,所以需要调用本地方法来处理一些问题
jvm中方法调用一定要用到方法栈,所以就有了本地方法栈
本地方法栈可通过本地方法接口(JNI)访问虚拟机内部的运行时数据区,也可直接操作本地内存和寄存器。
作用: 为了实现与操作系统或硬件的交互,或者提高程序的性能和效率。
特点:
本地方法栈与虚拟机栈的功能和结构非常相似,都由多个栈帧组成,每个栈帧对应一个方法的调用和执行。 栈帧中包含了局部变量表、操作数栈、动态链接、方法出口等信息,是方法执行过程中的各种数据。
本地方法栈也遵循先进后出原则,
方法被调用时,会创建新的栈帧并压入栈顶,方法执行结束时,会弹出栈顶的栈帧并返回结果。
本地方法栈的大小可以是固定的或动态扩展的,
如果栈的深度超过了虚拟机允许的最大深度,就会抛出StackOverflowError异常;
如果在扩展栈时无法申请到足够的内存,就会抛出OutOfMemoryError异常。
本地方法栈是线程私有的,与线程的生命周期同步,不会存在垃圾回收问题。
native关键字:
native修饰的方法,一般是用c或者cpp写的,这些方法是本地方法,可以被java调用
本地方法栈执行一些本地方法,其他与方法栈相同