共有设计和私有实现
Java虚拟机规范描绘了Java虚拟机应有的共同程序存储格式:Class文件格式以及字节码指令集。这些内容与硬件、操作系统及具体的Java虚拟机实现之间是完全独立的,可以看成是程序在各种Java平台实现之间互相安全地交互的手段。
- Java虚拟机实现必须能够读取Class文件并精确实现包含在其中的Java虚拟机代码的语义。
- 按Java虚拟机规范一成不变的逐字实现是一种可行的途径,但优秀的实现应该是在满足虚拟机规范的约束下还能对具体的实现做出修改和优化,而且虚拟机规范明确鼓励这样做。只要保证优化后的Class文件依然可以被正确读取,且包含在其中的语义能得到完整的保持,就可以选择任何方式去实现这些语义,虚拟机后台如何处理Class完全由实现者决定,只要它在外部接口上看起来和规范描述的一致即可。
- 虚拟机实现者可使用这种伸缩性来让Java虚拟机获得更高的性能、更低的内存消耗或者更好的可移植性,选择哪种特性取决于Java虚拟机实现的目标和关注点是什么。
- 虚拟机的实现的方式主要有以下两种
- 将输入的Java虚拟机代码在加载或执行时翻译成另外一种虚拟机的指令集。
- 将输入的Java虚拟机代码在加载或执行时翻译成宿主机CPU的本地指令集(即JIT代码生成技术)。
- Java虚拟机应被设计成可以允许有众多不同的实现,并且各种实现可以在保持兼容性的同时提供不同的、新的、有趣的解决方案。
Class文件结构的发展
- 相对于语言、API以及Java技术体系中其他方面的变化,Class文件结构一直处于稳定的状态,Class文件的主体结构、字节码指令的语义和数量几乎没有出现过变动,所有对Class文件格式的改进,都集中在向访问标志、属性表这些在设计上就可扩展的数据结构中添加内容。
- Class文件格式所具备的平台中立(不依赖于特定硬件及操作系统)、紧凑、稳定和可扩展的特点,是Java技术体系实现平台无关、语言无关两项特性的重要支柱。
- Class文件是Java虚拟机执行引擎的数据入口,也是Java技术体系的基础构成之一。了解Class文件的结构对进一步了解虚拟机执行引擎有很重要的意义。
网友评论