声明:
Author:赵志乾
Date:2018-6-18
Declaration:All Right Reserved!!!
背景知识:
C++应用经过编译、链接等步骤,最终生成机器码文件,也称做可执行文件。这类文件其本质是一组指令的组合,如精简指令集、复杂指令集等。不同的指令集对应着不同的硬件架构实现,这也就导致机器码文件同具体的底层硬件耦合在一块。当需要将C++应用迁移到不同的平台上运行时,就需要使用不同的编译器进行重新的编译、链接,进而得到同硬件适配的机器码文件。
字节码文件存在的意义:
统一底层的硬件,来实现应用的迁移,这一点不太现实(各个芯片厂商都在主推自己的架构)。为此就需要提供一个抽象层,来屏蔽底层的差异。而虚拟机便充当了底层硬件的抽象层。
虚拟机拥有一套属于自己的指令集,称作字节码指令集。上层应用都将转化为这一指令集的组合。同时,通过定义字节码文件格式来规范中间指令的存储。进而使得虚拟机拥有对外一致的指令集、指令存储、指令加载和指令执行行为。以期获得上层应用的可移植性。
虚拟机对外提供的是一组统一行为,其具体实现取决于不同的虚拟机厂商以及不同的底层平台。即不同平台使用不同的虚拟机实现进行适配。
注:字节码只是虚拟机指令的一种称谓,因为虚拟机指令以8位字节为单位,而得名字节码。
邮箱:zhaozhiqian001@163.com
参考资料:《深入理解java虚拟机》--周志明