大家好,又见面了,我是你们的朋友全栈君。
我们都知道,在Windows上,软件包后缀有exe,而苹果的Mac OS X系统上没有安装exe。类似地,Mac OSX系统上的软件安装包是dmg后缀,不能安装在Windows系统上。
为什么不能安装不同系统上的软件,因为操作系统的底层实现是不同的。对于Windows系统,exe后缀的软件代码被编译成能被Windows系统识别的机器代码。对于Mac OSX系统,最后将DMG后缀的软件代码编译为Mac OSX系统识别的代码。
系统软件不能通用是一个普遍的问题。但是所有使用Java的学生都知道Java代码可以在服务器端(Linux系统)或Windows系统上运行,但是我们还没有生成许多不同的代码。那么Java语言是如何做到这一点的呢?
与其他语言不同,Java语言不直接编译代码到系统相关的机器代码,而是将其编译成特定的语言规范,我们称之为字节码。无论在Windows、Mac OSX还是Linux系统中,Java程序都要编译成字节码文件,它们只能在那之后运行。
但是,即使编译成字节码文件,系统仍然不能理解字节码文件的内容,然后需要Java虚拟机的帮助。Java虚拟机会解析字节码文件的内容,并将它们转换成操作系统能够理解的机器代码。
简单地说,对于同一个Java源文件,我们把它编译成字节码,它既没有Linux也没有Windows系统知道。在这一点上,Java虚拟机是一个翻译器。它被转换为Linux系统上的Linux机器代码来监视Linux系统,而转换为Windows系统上的Windows机器代码来监视Windows系统。这样,Java就实现了“一次写,到处跑”的伟大愿景。
在Java虚拟机诞生之前,为了支持在不同系统上运行的软件,我们必须在多个平台上编写对应于特定系统的多个代码。但是Java虚拟机出现后,只需要根据具体的规范进行编译和编写。编译器编译字节码文件之后,虚拟机会将帮助您生成相应的Windows代码和MacCode字节码。基本上,最终将生成两个机器代码,Windows Code和MacCode,但是对于开发人员来说,他们只需要编写一次代码。Java虚拟机帮助开发人员进行重复性的工作,这使得开发更加高效。
许多初学者对Java虚拟机有误解,他们会觉得Java虚拟机只能运行Java代码。但事实上,Java虚拟机运行字节码文件。换句话说,如果在PHP中编写一段代码,并使用特定的编译器生成符合字节码规范的字节码文件,Java虚拟机也可以运行。
因此,虽然Java虚拟机的名称是Java虚拟机,但是Java虚拟机与Java语言没有直接关系。它只根据Java虚拟机规范读取类文件,根据规则解析和执行字节码指令,仅此而已。
如果你足够健壮,你可以编写一个编译器,将PHP语言代码编译成符合Java虚拟机规范的字节码文件,然后Java虚拟机也可以被执行。
确切地说,Java虚拟机绑定到字节码文件(类文件)。
最后,让我们回顾一下什么是虚拟机。事实上,Java虚拟机是字节码翻译器,它将字节码文件转换成每个系统的相应机器代码,以确保字节码文件可以在每个系统中正确运行。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156872.html原文链接:https://javaforall.cn