A new processor architecture poses significant financial risk to hardware and software developers alike, so both have a vested interest in easily porting code from one processor to another. Binary translation offers solutions for automatically converting executable code to run on new architectures without recompiling the source code.
--《Welcome to the opportunities of binary translation》
# 关于这本书:
虚拟机中较为重要的技术是二进制翻译。二进制翻译有效地解决了遗产代码问题,举例如下:如果你在X86机器上生成可执行文件hello后,想在MIPS机器上运行它,用./bt hello就可以了(假设bt为二进制翻译系统的可执行文件名)。它首先加载hello文件,并将它依赖的库也加载进来,然后从符号表中读取程序入口地址,以该地址为起始地址,以基本块(Block)为单位进行解释/翻译执行。
HP实验室开发的Dynamo系统让相同的可执行文件在相同的ISA上运行,在程序运行的过程中做一些优化,提高二进制码的质量,进而提升程序性能。你可以不用修改算法就能轻松提高程序性能,这是一个怎样神奇的系统!
Profile技术:插桩和采样。采样是一种非侵入式的Profile技术,不用修改二进制码和原程序。采样一般是基于硬件的,开销较小。
书中提到的一些优化,本地码链接(Code Patch)的效果很好,而且实现起来相对容易。
最值得一提的是书后面的参考文献有很多都不错,对相关的工作都有更深入的介绍。
# 本书讲未涉及或是讲解得不详细的一些技术
《a brief history of just in time》分析了各种语言(APL/BASIC/Fortran/Smalltalk/Self/ML/
Erlang/Prolog/Java)的编译器/虚拟机对Just in time技术的应用。
由于成书时间较早(2004年),在"Optimizaing Framework"一节中没有提到目前比较流行的多线程优化框架:在原有程序的基础上,新建一个或多个辅助线程来专门进行优化。多核技术的发展促进了这个框架的流行。基于此框架,我们就可以将耗时的优化放在辅助线程中进行。主线程与辅助线程并发地执行,因而不会对主线程产生较大的影响。
Feedback-directed optimization(FDO):每次运行程序时,搜集一些信息,供下次运行该程序时用作优化器的输入,这样程序就能越来越快,有没有机器学习的意味啊!Micro委员会专门举办了几届关于FDO的会议,然后就没有然后了——停了,大概觉得其中的关键技术都研究得差不多了 :)
# 关于JAVA虚拟机
JAVA虚拟机就是将JAVA源程序编译成字节码(Byte Code),然后在运行时做一些优化(Hotspot技术采用的就是即时(on the fly)编译技术)。