对于java虚拟机和编译器的理解
java
的两个层面
对于大家所说的java
,有两个层面的意思。一个是java
作为编程语言,另一方面是作为程序运行环境的java
。
java
- >字节代码- >本地代码
同其他编译语言一样,java
是将java
语法记述的源代码编译后运行。
不过,编译后生成的并不是cpu使用的本地代码(段后解释),而是叫做字节代码的程序,.class
文件
-
机器语言的程序成为本地代码。
-
程序员书写的为源代码。
-
通过对源代码进行编译,就可以得到本地代码。
-
一般应用软件包下收录的不是源代码而是本地代码,即编译后的代码。
而要运行字节代码程序就要为其打造一个环境,我们把这个环境成为java虚拟机。
java
虚拟机是一边把java
字节代码逐一转换为本地代码,一边运行的。
编译器- >虚拟机- >CPU
编译器会将程序员编写的源代码.java
转换成字节代码,而java
虚拟机则会把字节代码变换为x86系列cpu使用的本地代码,然后由x86系列cpu负责实际的处理。
所说的虚拟机,百科上这样解释:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
在浅显的认知中,利用虚拟机,我们可以在mac的操作系统上运行windows的应用。例如,VirtualBox for mac是一款开源虚拟机软件,可以利用该软件在Mac OS平台上运行Windows软件。
java
虚拟机
从操作系统方面来看,java
虚拟机是一个应用;而从java
应用方面来看,java
虚拟机是运行环境。
不同的操作系统会有不同专用的java
虚拟机。就好比mac系统下的应用和Android系统下的应用不一定兼容。