JVM是什么鬼
初见JVM(Java Virtual Machine)
学过java的小伙伴都听过Java名言:“一次编写,到处运行”;都知道有JVM这个东西,但它具体是干嘛?为啥要用它?你们知道吗?如果不知道的话就听我细细道来吧。
VM和M
VM的意思是虚拟机器(Virtual Machine)一般我们都叫它虚拟机,那M就是单指“机器”,那这个机器是什么呢?
M
所谓的机器就是如同我们电脑中的CPU一样,可以读取信息、执行运算、发送信息的东西。
CPU从内存中读取指令,从硬盘中获取电脑内储存的文件,从摄像头读取图像,从麦克风读取声音,从键盘读取用户输入的文字等,同时,CPU还能给屏幕发送要显示的图像,给喇叭发送播放的声音,向硬盘写入文件等等。这些就是CPU与其外围设备的交互。毫无疑问的,CPU也可以进行运算,所以CPU就是实际存在的M。
VM
那什么是VM呢?字面意思,就是虚拟的,并不真实存在的M,VM实际上就是一个运行在机器上的软件,同样也可以实现像M一样的功能:读取信息、执行运算、发送信息。但是实际上它是用软件编写,来模拟一个真实的机器,所以就被叫做虚拟机。
JVM
知道什么是VM,所以我们来讲讲JVM是什么。
既然JVM被称作是M,那它一定有机器的特点:读运写。那JVM具体怎么做来实现一个M的功能呢?
我们知道,当我们编写完一个java类时,其后缀名是“.java”,如果想运行它,必须要将它编译成“.class”后缀的文件才行。这个“.class”文件就是JVM能识别的指令和数据的集合。
.class 文件对于JVM就好比 .exe 文件对于CPU
JVM从class文件中读取信息,并根据这些信息来让CPU进行相应的运算。并且JVM也可以向屏幕和喇叭传入信息,只不过都是通过CPU来传话。
从上文可以看出:虚拟机都是要依附机器存在的(可以套娃,在虚拟机里使用虚拟机,但是至少要有一个真实存在的机器,不然就是空中楼阁、不切实际的。)
这时候就有长得帅的小伙伴要问了:啊,既然都有机器了,要虚拟机干嘛?
诶~,这就是要提到文章开头说的,Java的名言:“一次编写,到处运行”。我们都知道电脑上的软件和手机上的软件是不通用的,甚至电脑之间的软件是不通用的(比如Windows、Linux或Mac),想要用一套代码在多种客户端上运行是很难的…………除非,你用java,由于JVM的存在,所有的JVM都能执行相同的class文件而不要对不同的客户端进行适配,只需要让客户在自己的客户端上安装对不同客户端适配的JVM,就能实现“一次编写,到处运行”
Android比较特殊,因为安卓使用的是谷歌自己实现的虚拟机,且程序启动方式与桌面端相差比较大,所以实际上就算你用java开发,也是需要对Android端进行适配的