文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发数据结构KVM的执行引擎--栈和帧 、指令集
精品推荐
特别推荐
·网游外挂编写完全攻略
·开发WDM型的USB设备驱动程序
·数据库设计范式深入浅出
·理解软件保护技术之序列号方式
·大型网站必鉴:分销渠道的结构
·你的代码真的很健壮吗
·利用HOOK拦截封包原理
·四种网络游戏外挂的设计方法
·程序语言效率比较
·五子棋算法
·正则表达式从入门到精通
·SQL Server不能启动的常见故障
·Windows应用程序设计的基本术语
·软件本地化与汉化
·Windows中断编程
·windows nt 4.0中文版的开机过程
热点TOP10
·网游外挂编写完全攻略
·简单对象访问协议(SOAP)初级指南
·DB2 数据库设计:取得最佳性能的准则
·四种网络游戏外挂的设计方法
·兵之利器 软件开发辅助工具纵览
·开发WDM型的USB设备驱动程序
·透视特洛伊木马程序开发技术
·游戏外挂设计技术探讨
·带你全面了解数据库应用系统的开发步骤
·微软的秘密:微软公司软件开发模式简介
·VS2005视频教程之站点地图[视频]
·借鉴:能增长1倍销售额的七种广告武器
·《数据结构》试题下载2004
·恶意代码的亲密接触之文件搜索和API导址
·DCOM揭秘之六
·开发Windows XP-Ready的程序
·KVM的执行引擎--栈和帧 、指令集
·DB2数据库应用系统性能优化深入探究
·中国互联网的二十年
·程序语言效率比较

KVM的执行引擎--栈和帧 、指令集

日期:2007年5月3日 作者: 查看:[大字体 中字体 小字体]


    接下来的两篇将介绍在KVM中字节是如何执行的,这是KVM中比较核心的内容,分为两部分来讲,本篇先介绍虚拟机中的栈和帧是如何实现的。

    首先来看一些全局指针,在头文件kvm/vmcommon/h/interpret.h中定义有以下结构:

Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
strUCt GlobalStateStruct { 
    BYTE*         gs_ip; /* Instruction pointer (program counter) */
    cell*         gs_sp; /* Execution stack pointer */
    cell*         gs_lp; /* Local variable pointer */
    FRAME         gs_fp; /* Current frame pointer */
    CONSTANTPOOL  gs_cp; /* Constant pool pointer */
};

    这五个变量就像CPU中的寄存器一样,在KVM的运行过程中起到非常基础性的作用。它们分别是程序计数器、执行栈指针、局部变量指针、当前帧指针和当前常量池指针。

    Java虚拟机为每一个线程开设一个栈,栈中存储的数据以“帧”为单位,虚拟机在调用一个新的方法时,会向栈中压入一个新帧,帧内数据是这个方法的运行状态,Java字节码的执行总是在当前帧内进行,方法运行结束时这个帧会被弹出。所以这个栈可以称为“方法栈”,帧可以称为“方法帧”。

    按照Java虚拟机的规范,一个帧应由三个部分组成:局部变量区,操作数栈和帧数据区。每个帧的局部变量区和操作数栈的大小都可能不一样,要依方法本身的庞大程度而定,但在调用一个方法时,可以根据这个方法的字节码计算出所需要的局部变量区和操作数栈的大小。规范对帧数据区的大小没有规定,帧数据区的大小和内容可由虚拟机实现来决定。

    局部变量区:

    局部变量区一般会位于帧中最前面(即地址最小)的位置,它包含了对应方法的参数和局部变量,一般情况下,它的大小是向4字节对齐的,每4字节是一个“字”,变量以“字”为单位来存入。在它的最前面顺序存放的是对应方法的参数,类型为int、float、reference和returnAddress的参数占一个“字”,类型为byte、short和char类型的参数对被转化为int型,所以也占一个字;long和double类型的值要占用两个字。当然,“字长”选为多少是由虚拟机实现自己来决定的,不是一定要选4字节为一个字,如果选8字节构成一个字的话,所有值都只占一个字,更加整齐,但是浪费了很多空间。

    如果方法不是静态的,那么虚拟机会自动将方法所在对象的句柄存在局部变量区中索引为0的位置,真正的参数从位置1开始存;而如果方法是静态的,它就与具体的对象没有关系,所以不必存放对象句柄,参数从位置0开始存放。

    在局部变量区接下来的空间中,虚拟机可以按照任意的方式来存贮方法内的局部变量。


[1] [2] [3] [4] [5] [6] [7] 下一页 




上一篇:UML应用的三重境界

下一篇:从Caché看后关系型数据库

KVM的执行引擎--栈和帧 、指令集 相关文章:
·KVM的执行引擎--栈和帧 、指令集
KVM的执行引擎--栈和帧 、指令集 相关软件:

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn