java虚拟机是软件模拟的计算机,可以在任何处理器上(无论是在计算机中还是在其它电子设备中)安全并且兼容的执行保存在.class文件中的字节码。java虚拟机的"机器码"保存在.class文件中,有时也可以称之为字节码文件。java程序的跨平台主要是指字节码文件可以在任何具有java虚拟机的计算机或者电子设备上运行,java虚拟机中的java解释器负责将字节码文件解释成为特定的机器码进行运行。java源程序需要通过编译器编译成为.class文件(字节码文件),但是,java虚拟机的建立需要针对不同的软硬件平台做专门的实现,既要考虑处理器的型号,也要考虑操作系统的种类。
可以这样简单的理解:假设你有一个.java文件现在要运行了,首先虚拟机将该.java文件通过编译器(compiler)编译成字节码文件,也就是我们通常所说的.class文件;然后虚拟机通过解释器(interpreter)将该自解码文件解释成为机器码运行,目前在SPARC结构、X86结构、MIPS和PPC等嵌入式处理芯片上、在UNIX、Linux、windows和部分实时操作系统上都有java虚拟机的实现;即不同结构的机器可以运行同一个java程序,原因就是有虚拟机的存在。该过程也就是我们所说的跨平台。
JVM 的原理就是把写哈的java代码转化为机器可以识别的binary 代码.然后再由compiler 去编译binary代码. 这也就是为什么java是平台无关的原理了.
其他的编译环境都是把程序代码转化为编译代码直接编译,这样机器底层就不能识别这些代码,所以不能跨平台操作.
而jvm虽然在表面上走了远路,但是这样却省去了不少的麻烦,也省了不少的内存占有.