Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个、一个垃圾回收堆和一个存储方法域

Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。

Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机
有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。

一,为什么要使用Java虚拟机?
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特
点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代
码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语
言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成
在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java
虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。


二,JVM是用C++写的!

C++有指针,是一种介于低级语言和高级语言之间的一种语言,C++可以操纵底层资源,和硬件关系相对较大。
Java是一种面向对象的高级语言,它封装(或者说对开发者屏蔽)了指针,不能直接操纵硬件,源程序经过编译并不生成机器码,而是生成字节码这种中间代码,并且为了跨平台特性,字节码是不能直接在机器上运行的,需要有一个虚拟机(JVM)来解释执行。而不同平台底层肯定不一样,所以不同平台上的JVM是不一样的。JVM就负责把通用的字节码解释成对应平台的底层代码去执行。不难看出,要这么做,那么JVM的实现就必须和特定硬件资源平台密切相关,Java语言自己目前是做不到的。


JVM是C++开发的,那为什么不是JAVA呢?

Java程序运行需要JVM的支持,如果JVM又是用Java语言写的,那么为了运行Java程序就要启动JVM,而启动JVM因为JVM本身又是个Java程序,那么又需要启动一个JVM,不就陷入一个永久的矛盾的悖论中去了么?