注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

钱五哥の163空间

记录俺的生活和工作历程

 
 
 

日志

 
 
关于我

从事网络通信软件和开发管理开发多年,了解各类软件系统的架构、设计、开发和测试以及相应的开发方法。工作之余,喜欢研究一些自己感兴趣的事情,包括写写小程序、做做木工、看看连续剧、读读军事杂志、养鱼种花等等

网易考拉推荐
GACHA精选

Register-base & Stack-based Virtual Machine  

2013-04-21 21:24:17|  分类: IT技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

上次简要分析了Dalvik VM和JVM的一些差异和应用场景,后来又有人再次提到基于寄存器和基于堆栈的虚拟机问题。其实也一直想深入研究一下这个课题,简要搜索一下发现这个话题已经被分析地很明白了,引用和总结前人们的分析如下:

一、指令长度和操作数

  • 基于寄存器的VM指令更长,通常会携带3个参数,2个是操作数,1个是结果。操作数需要被加载到寄存器中才能被运算。
  • 基于堆栈的VM指令比较短,通常会将操作数压入堆栈,计算,然后取出,因此通常指令数量更大,但是指令本身的长度则较短。

?

image

p1 基于堆栈的计算过程

?

image

p2 基于寄存器的计算过程,注意原文没有加入数据置入寄存器的指令

?

二、计算过程和性能

Wen-Cheng Tsai在一篇调研报告中指出(引用Shi, Yunhe的测试结果):

  • 同一段 source code 分別轉換為 stack-based instruction 和 register-based instruction 來比較,平均來說 register-based code size 比 stack-based 增加 25.05%的 size。
  • 處理同樣的工作,Register-based VM只要花較少的instructions, Stack-based VM 則需要花較多的instructions。從數據上來看,Register-based 的 instruction 減少了 43.47%的 move 指令和 6.95% 的 constant
  • 结论:對不同的 13 個 method 測試的結果,平均 Stack-based 轉換成 Register-based 時,增加的 code size 花費在 load 的 cost 與消去多餘 instruction 的 cost 比例 大概是1.07%,這說明了消去多餘instruction的cost遠遠大於增加的load cost, 因此 register-based machine 在執行程式上會更有效率

?

三、优化能力

如(二)中所述,基于寄存器的VM可以在两个方面获得优化:(1)减少内存移动次数(2)优化常量使用

?

四、背景

很有必要补充一下Dalvik和JVM的背景,试图解释这几个问题:

(1)为什么当年Sun推出JVM的时候不采用基于寄存器的设计?

Java出现在1995年的样子,目标是写一次代码可以在各处运行(WORA),考虑到这个目标,基于堆栈的VM是各种体系结构的CPU都支持的架构(1995年前后正是CPU大爆炸的时候,MIPSPowerPC、Intel、PA-RISC、AMD、Sparc、Dec Alpha、ARM、Itanium层出不穷)。而现在基于寄存器的设计之所以可行,是因为其主要用于ARM,而ARM有适中的寄存器可供使用。

?

(2)为什么Google非要搞基于寄存器的VM?

首先当然是性能,另外就是回击Sun对其嵌入式Java(JavaME)的保护,Dalvik是Google的一个内部实现,Google阻止其它的替代实现[6]。2010年Oracle收购了Sun之后就发动对Google的专利诉讼,共有7件专利,但是最终Google在2012年6月获得这场战争的胜利。

?

(3)为什么Oracle不搞基于寄存器的VM?

这个问题不好回答,首先存在兼容性的问题,两种VM上的应用是不兼容的,不能同时存在,这就要求Oracle写两个JVM来支持。而这个显然是存在成本问题的。其次是潜在的IPR问题,Google不会那么轻易放弃对Dalvik的控制权的。但是Oracle

?

五、Java SE 7

可以看看文献11中介绍的JavaSE7的新特性,可以发现Oracle依然在持续巩固JVM的优势,对寄存器VM的使用却没有啥动作

(1)动态类型语言支持

(2)GC改进

(3)语言特性增强,支持switch(string)?

?

相关信息:

  1. Stack based vs Register based Virtual Machine Architecture, and the Dalvik VM(Also: http://www.codeproject.com/Articles/461052/Stack-based-vs-Register-based-Virtual-Machine-Arch
  2. Virtual Machines For Abstraction: The Dalvik VM
  3. Android Dalvik Virtual Machine
  4. Wen-Cheng Tsai:Linux System Kernel Application Survey report Stack-based or Register-based Virtual Machine。
  5. Shi, Yunhe; Gregg, David; Beatty, Andrew; Ertl, M. Anton (2005-06-11). “Machine Showdown: Stack Versus Registers” Retrieved 2009-12-22. http://www.usenix.org/events/vee05/full_papers/p153-yunhe.pdf
  6. http://baike.baidu.com/view/1551869.htm
  7. http://zh.scribd.com/doc/35811761/Oracle-s-complaint-against-Google-for-Java-patent-infringement
  8. http://phandroid.com/2010/08/13/google-sued-for-copyright-infringement-by-oracle/
  9. http://aatul.me/2013/04/17/dvm-vs-jvm/
  10. Google wins, Oracle loses: Java API case closed - for now
  11. Understanding JVM Internals, from Basic Structure to Java SE 7 Features
  12. ORACLE VS ANDROID
  评论这张
 
阅读(479)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017