java 虚拟机如何翻译字节码 基于栈和基于寄存器的区别
来源:互联网 发布:淘宝举报重复铺货 编辑:程序博客网 时间:2024/05/16 02:04
java 编译 解释执行
javac 编译器 完成了程序代码经过词法分析, 语法分析, 到抽象语法树, 在遍历语法树生成线性的字节码指令流的过程
javac 最后是生成了.class 的字节码
最后字节码需要翻译成机器语言才能执行
基于栈和基于虚拟机的指令集
基于栈执行 1 + 1, 是如下的指令集
iconst_1iconst_1iaddistore_0
两台 iconst_1 连续把两个常量 1 压入栈后, iadd 指令把栈顶的两个值出栈并想家, 然后再把结果放回栈顶, 最后 istore_0 把栈顶的值放到局部变量表的第0个 Slot 中
基于寄存器的指令集如下
mov eax,1add eax,1
mov 指令把 EAX 寄存器的值设为1, 然后 add 指令再把这个值加1, 结果就保存在 EAX寄存器中
基于栈和基于寄存器的区别
栈架构指令集的主要缺点是执行速度相对来说稍微慢一些
基于堆栈的机器需要更多指令,而基于寄存器的机器指令更长。
Android 是基于寄存器的Dalvik虚拟机
Dalvik虚拟机通过一个叫做dx的转换工具,可以将传统的JVM虚拟机中的字节码(.class格式文件)转换为在Dalvik虚拟机中运行的字节码(dex格式)
Dalvik 经过优化,每个 App 开启一个虚拟机示例,这样保证一个 App 的崩溃不会导致整个虚拟机崩溃。
它允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
参考文章
Dalvik和ART的区别
Dalvik和Java字节码的对比
0 0
- java 虚拟机如何翻译字节码 基于栈和基于寄存器的区别
- 基于栈和基于寄存器的Java虚拟机
- 基于栈和基于寄存器的虚拟机
- 基于栈虚拟机和基于寄存器虚拟机的比较
- 基于栈虚拟机和基于寄存器虚拟机的比较
- java虚拟机和Dalvik虚拟机的区别,DVM为什么要设计成基于寄存器的!
- 基于栈和基于寄存器的Java虚拟机(JVM和Dalvik)
- 基于寄存器与基于栈的虚拟机
- 基于栈的虚拟机 VS 基于寄存器的虚拟机
- 基于栈与基于寄存器的区别
- 于堆栈的(Stack-based ) 和基于寄存器(Register-based) 的虚拟机区别
- 于堆栈的(Stack-based ) 和基于寄存器(Register-based) 的虚拟机区别
- 解释执行和编译执行的区别、基于栈和基于寄存器的指令集区别
- [深入理解Java虚拟机]第八章 字节码执行引擎-基于栈的字节码解释执行引擎
- 虚拟机(基于栈还是基于寄存器)之谈
- 《深入理解Java虚拟机》——方法调用与基于栈的字节码解释执行引擎
- Spring AOP,基于动态代理和字节码(CGLIB)区别
- 基于寄存器与基于栈
- [LeetCode-7] Reverse Integer(反转整数)
- 欢迎使用CSDN-markdown编辑器
- 生成密钥方法
- SOAPUI系列02-SOAPUI PRO 破解
- 某游戏公司“中国传统服装史”培训圆满结束!
- java 虚拟机如何翻译字节码 基于栈和基于寄存器的区别
- 设计模式之-代理模式(Proxy)
- myeclipse bulid workspace 卡死的问题
- 三教九流
- 快速排序(五)
- CodeChef2015年9月问题
- Vim的全选实现
- IOC容器基础
- json教程系列(5)-json错误解析