Java虚拟机(七)

本地方法栈

当一个线程调用native方法时,它就进入了一个不受java虚拟机限制的世界。它可以使用本地处理器的寄存器,在任何数量的本地堆上分配内存或者使用任意类型的栈。

本地方法接口会使用某种类型的本地方法栈,当线程调用java方法时,虚拟机创建一个帧并把它push到java栈中,当线程调用natvie方法时,线程不会将新的帧push到线程的java栈中,java虚拟机会只是动态连接到native方法并直接调用它。

一个本地方法可能会调用一个java方法,在这种情况下,线程会离开本地方法栈并且进入另一个java栈中。下图描述了线程调用一个native方法,然后在native方法中回调另一个java方法。

上图中,线程调用了两个java方法,第二个java方法调用了一个native方法。这个动作会引起虚拟机使用一个本地方法栈,在这个图中,本地方法栈以一个有限数量的连续内存空间呈现。假定他是一个c栈,每个c链接函数用以灰色呈现,并且以虚线作为分割。第一个c链接函数作为一个native方法被调用,它调用了另一个c链接函数。第二个c链接函数通过native方法接口调用了java方法。然后这个java方法又调用了另一个java方法,也就是图中所示的当前方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值