- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入Java虚拟机——本地方法栈
本地方法栈
前 面提到的所有运行时数据区都是在Java虚拟机规范中明确定义的,除此之外,对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据 区。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制的世界。本地方法可以通过本地方法接口来访问虚拟机的运行时数据区,但不止 于此,它还可以做任何它想做的事情。比如它甚至可以直接使用本地处理器中的寄存器,或者直接从本地内存的堆中分配任意数量的内存等等。总之,它和虚拟机拥 有同样的权限(或者说能力)。
本地方法本质上是依赖于实现的,虚拟机实现的设计者们可以自由地决定使用怎样的机制来让Java程序调用本地方法。
任 何本地方法接口都会使用某种本地方法栈。当线程调用Java方法时,虚拟机会创建一个新的栈帧并压入Java栈。然而当它调用的是本地方法时,虚拟机会保 持Java栈不变,不再在线程的Java栈中压入新的帧,虚拟机只是简单地动态链接并直接调用指定的本地方法。可以把这看作是虚拟机利用本地方法来动态扩 展自己。就如共Java虚拟机是的实现在按照其中运行的Java程序的吩咐,调用属于虚拟机内部的另一(动态链接的)方法。
如果某个虚拟机 实现的本地方法接口是使用C连接模型的话,那么它的本地方法栈就是C栈。我们知道,当C程序调用一个C函数时,其栈操作都是确定的。传递给该函数的参数以 某个确定的顺序压入栈,它的返回值也以确定的方式传回调用者。同样,这就是该虚拟机实现中本地方法栈的行为。
很可能本地方法接口需要回调Java虚拟机中的Java方法(这也是由设计者决定的),在这种情形下,该线程会保存本地方法栈的状态并进入到另一个Java栈。
图 5-13描绘了这种情况,就是当一个线程调用一个本地方法时,本地方法又回调虚拟机中的另一个Java方法。该图展示了Java虚拟机内部线程运行的全景 图。一个线程可能在整个生命周期中都执行Java方法,操作它的Java栈;或者它可能毫无障碍地在Java栈和本地方法栈之间跳转。
如图 5-13所示,该线程首先调用了两个Java方法,而第二个Java方法又调用了一个本地方法,这样导致虚拟机使用了一个本地方法栈。图中的本地方法栈显 示为一个连续的内存空间。假设这是一个C语言栈,期间有两个C函数,它们都以保卫在虚线中的灰色块表示。第一个C函数被第二个Java方法当作本地方法调 用,而这个C函数又调用了第二个C函数。之后第二个C函数又通过本地方法接口回调了一个Java方法(第三个Java方法),最终这个Java方法又调用 了一个Java方法(它成为图中的当前方法)。
就像其他运行时内存区一样,本地方法栈占用的内存区也不必是固定大小的,它可以根据需要动态扩展或者收缩。某些实现也允许用户或者程序员指定该内存区的初始大小以及最大,最小值。
5.3.10 执行引擎
任 何Java虚拟机实现的核心都是它的执行引擎。在Java虚拟机规范中,执行引擎的行为使用指令集来定义。对于每条指令、规范都详细规定了当实现执行到该 指令时应该处理什么,但是却对如何处理言之甚少。在前面的章节中提到过,实现的设计者有权决定如何执行字节码,实现可以采取解释、即时编译或者直接用芯片 上的指令执行,还可以是它们的混合,或任何你能想到的新技术。
和本章开头提到的对“Java虚拟机”这个术语有三种不同的理解一样,“执行 引擎”这个属于也可以有三种解释:一个是抽象的规范,一个是具体的实现,另一个是正在运行的实力。抽象规范使用指令集规定了执行引擎的行为。具体实现可能 使用多种不同的技术——包括软件方面、硬件方面或数种技术的集合。作为运行时实例的执行引擎就是一个线程。
运行中Java程序的每一个线程 都是一个独立的虚拟机执行引擎的实例。从线程生命周期的开始到结束,它要么在执行字节码,要么在执行本地方法。一个线程可能通过解释或者使用芯片级指令直 接执行字节码,或者间接通过即时编译器质性编译过的本地代码。Java虚拟机的实现可能用一些对用户程序不可见的线程,比如垃圾收集器。这样的线程不需要 是实现的执行引擎的实例,所有属于用户运行程序的线程,都是在实际工作的执行引擎。
指令集 方法的字节码流是由Java虚拟机的指令序列构 成的,每一条指令包含一个单字节的操作吗,后面跟随0个或多个操作数。操作码表明需要执行的操作;操作数向Java虚拟机提供执行操作码需要的额外信息。 操作码本身就已经规定了它是否需要跟随操作数,以及如果有操作数的话,它是什么形式的。很多Java虚拟机的指令不包含操作数,仅仅是由一个操作码字节构 成的。根据额操作码的需要,虚拟机可能除了跟随操作码的操作数之外,还需要从另外一些存储区域
您可能关注的文档
最近下载
- 《风电叶片用拉挤板 复合组件I型断裂韧性的测定》征求意见稿.pdf VIP
- ISO11607-1 -2006(中文)最终灭菌医疗器械的包装 第1部分-材料、无菌屏障系统、和包装系统要求.pdf
- “保险+期货”服务地方特色农产品发展的效应分析--以新疆麦盖提县红枣为例.pdf
- 大气压低温等离子体特性与应用研究现状.pptx VIP
- 白建娥语录测试题.docx
- 人教版(2024新版)八年级上册物理第六章《质量与密度》教学设计(共4节).docx
- 川教版可爱的四川7至8年级 主题一 第3课《雄伟的高原雪山》 教案.doc
- 廉洁诗歌朗诵四(1).docx
- 新北师大版-八年级数学上册-第四章一次函数知识点总结和典型例题分析.pdf VIP
- 工业园区控制性详细规划-说明书.doc
文档评论(0)