Lua一直把虚拟机执行代码的效率作为一个非常重要的设计目标.而采用什么样的指令系统的对于虚拟机的执行效率来说至关重要. Stack based vs Register based VM 根据指令获取操作数方式的不同,我们可以把虚拟机的实现分为stack based和register based. Stack based vm 对于大多数的虚拟机,比如JVM,Python,都采用传统的stack based vm. Stack based vm的指令一般都是在当前stack中获取和保存操作数的.比…
name args desc OP_MOVE A B R(A) := R(B) OP_MOVE用来将寄存器B中的值拷贝到寄存器A中.由于Lua是register based vm,大部分的指令都是直接对寄存器进行操作,而不需要对数据进行压栈和弹栈,所以需要OP_MOVE指令的地方并不多.最直接的使用之处就是将一个local变量复制给另一个local变量时: local a; local b = a; 在编译过程中,Lua会将每个local变量都分配到一个指定的寄存器中.在运行期,lua使用loc…
在编译期,如果要访问变量a时,会依照以下的顺序决定变量a的类型: a是当前函数的local变量 a是外层函数的local变量,那么a是当前函数的upvalue a是全局变量 local变量本身就存在于当前的register中,所有的指令都可以直接使用它的id来访问.而对于upvalue,lua则有专门的指令负责获取和设置. 全局变量在lua5.1中也是使用专门的指令,而5.2对这一点做了改变.Lua5.2种没有专门针对全局变量的指令,而是把全局表放到最外层函数的名字为"_ENV"的up…
近来重新安装了JAVA,安装过程中出现问题,网上找到解决办法,汇总发布. 解决流程: 1.确定自己的环境变量设置没问题,没有出现遗漏 : . 等情况 (具体环境变量设置百度) 2.环境变量设置后 ,dos窗口下可以运行java指令,但运行javac时,出现"javac不是内部或外部指令" 3.在自己的jdk\bin目录下查找有没有 javac.exe程序,若有javac程序,环境变量设置错误,返回检查. 4.没有javac.exe ,则问题出在安装目录上.需要卸载重装.安装JDK 选择…
JDK安装完,命令行窗口中运行Java正常,运行Javac显示不是内部或外部指令 不存在百度上说的没有安装JDK,只安装了JRE 我的电脑是64位Win7操作系统 第一次安装的JDK不是从官网下载的,初步怀疑是JDK的问题,随后去官网下载了一个JDK安装完毕还是显示Javac不是内部或外部指令 最终找到原因:Path环境变量配置错误,直接复制JDK安装路径下的bin,粘贴到Path中就可以了 C:\Program Files\Java\jdk1.6.0_45\bin…
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧,隐隐约约地记得是与Class文件格式中的方法表有关,但是不知道虚拟机在执行的时候,是如何选择正确的方法来执行的了.so,趁着周末,把压箱底的<深入理解Java虚拟机>拿出来,重新看了下第6.7.8章中的内容,梳理一下:从我们用开发工具(Intellij 或者Eclipse)写的 .java 源程…
Atitit .jvm 虚拟机指令详细解释 1. 一.未归类系列A1 2. 数据mov系列2 2.1. 二.const系列2 2.2. 三.push系列2 2.3. ldc系列 该系列命令负责把数值常量或String常量值从常量池中推送至栈顶.3 2.4. 5.1.load系列A 该系列命令负责把本地变量的送到栈顶.3 2.5. 5.2.load系列B 该系列命令负责把数组的某项送到栈顶.4 2.6. 6.1.store系列A 该系列命令负责把栈顶的值存入本地变量.5 2.7. 6.2.stor…
本文转载自Java SE7 虚拟机指令操作码助记符 导语 在Class文件中,Java方法里的方法体,也就是代表着一个Java源码程序中程序的部分存储在方法表集合的Code属性中.存储在Code属性中的是字节码,也就是编译后的程序.Java虚拟机的指令由两部分组成,首先是一个字节长度.代表某种含义的数字(即操作码),在操作码后面跟着零个或多个代表这个操作所需的参数(即操作数).由于Java虚拟机采用的是面向操作数栈而不是寄存器的架构,所以大多数指令不包含操作数,只有一个操作码. 操作码的长度只有…
JVM 内部原理(一)- 概述 介绍 版本:Java SE 7 图中显示组件将会从两个方面分别解释.第一部分涵盖线程独有的组件,第二部分涵盖独立于线程的组件(即线程共享组件). 目录 线程独享(Threads) JVM 系统线程(JVM System Threads) 程序计数器(PC) 栈(Stack) 本地(方法)栈(Native (Method) Stack) 栈约束(Stack Restrictions) 帧(Frame) 本地变量数组(Local Variable Array) 操作数…
原文地址:http://msdn.microsoft.com/en-us/magazine/cc163791.aspx 原文发布日期: 9/19/2005 原文已经被 Microsoft 删除了,收集过程中发现很多文章图都不全,那是因为原文的图都不全,所以特收集完整全文. 目录 前言 CLR启动程序(Bootstrap)创建的域 系统域(System Domain) 共享域(Shared Domain) 默认域(Default Domain) 加载器堆(Loader Heaps) 类型原理 对象…