细说JVM系列:JVM存在的目的和意义是什么?

JVM存在的目的和意义是什么?

一句话,实现跨平台。

代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确是编程语言发展的一大步。

记得在第一节计算机程序设计课上我的老师讲过:计算机只认识0和1,所以我们写的程序需要经过编译器编译成由0和1构成的二进制格式才能有计算机执行。多年过去了,今天的计算机仍然只能识别0和1,但由于虚拟机和大量建立在虚拟机上的程序语言如雨后春笋出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。

无关性的基石

因为操作系统的多样:linux、mac、windows、unix等等,他们在实现上都有多少的差异,在java之前,程序移植到不同平台总会有很多问题,甚至我们要为多个平台编写不同的实现。与平台无关的理想最终实现在操作系统的应用层上:sun公司以及其他虚拟机提供商发布了许多可以运行在各种平台上的虚拟机,这些虚拟机都可以载入和执行一种平台无关性的字节码,从而实现了程序的”一次编写,到处运行“。

各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码是构成平台无关性的基石。

jvm在设计之初就明确了不仅仅为java服务的可能性,时至今日,商业机构和开源机构已经在java语言之外发展出一批在java虚拟机之上运行的语言,如Clojure\Groovy\JRuby\Jython\Scala等。这里面scala在大数据领域运行较为广泛,spark的实现语言就是scala。

实现语言无关性的基础仍然是虚拟机和字节码存储格式。jvm不和包括java在内的任何语言绑定,它只在class文件这种特定的二进制文件格式所关联,class文件中包含了java虚拟机指令集和符号表以及若干辅助信息,任何一门功能性语言都可以表示为一个能被java虚拟机所接受的有效的class文件。如下图所示;

你可能感兴趣的:(java提高)