**
简介
**
计算机被发明出来后,他只认识0和1,如今过去了这么多年,计算机仍然只是认识这两个数字,而我们的编程语言却在不断的变得高级,所以,我们需要编译器将我们的高级语言编译成计算机可以读懂的二进制语言,并且越来越多的语言选择了与操作系统无关的、平台中立的格式作为程序编译后的存储格式。
Java高级语言作为一个可以被各个平台的使用的语言,最大的功劳应该归功于Java虚拟机(JVM),依靠JVM这个平台对Java语言的编译,如果没有JVM,java就无法实现在各个操作系统的使用,当然也不会被应用的如此广泛。在这里,我们说的虚拟机是所谓的高级语言虚拟机, 并不是像Vmware那样完全虚拟一个硬件和操作系统出来
Java程序的运行机制
但凡学过Java的人都知道,我们编写的好的java程序段需要用到javac这个命令进行编译,把我们的程序段编译成.class文件,而编译成的.class文件则需要通过JVM进行编译以此在操作系统上运行,而class文件则是一组以8位字节为基础单位的二进制流,如下图所示:
怎么样,是不是看的眼花缭乱,而JVM却可以通过JVM规范标准进行结构化,宏观上的流程如下图所示:
每个class问价的头四个字节CA FE BA BE(咖啡宝贝)被称为魔数,他的唯一作用就是确定这个文件能否被虚拟机接受,紧接着后面的00 00这两个字节代表的是次版本号,00 34后面的两个字节是主版本号,这样,一个程序的class文件的最基本的信息已经被JVM识别出来。