JVM概览
JAVA虚拟机是一个抽象的计算机,JAVA虚拟机规范规定了每一个JAVA虚拟机都必须要有的特性,但给每个JAVA虚拟机的实现提供了很多选择。例如,虽然每一个JVM必须要能够执行JAVA字节码,但是它可以用任何技术去执行字节码。
一个JVM的重要工作就是加载CLASS文件及执行字节码。
execution engine作为JVM的一部分在不同的实现中并不相同。在最简单的执行引擎中可能一次解释一段字节码。另一类执行引擎,像JIT执行更快但是耗费更多的内存。在这类引擎中,当方法第一次被调用时,方法的字节码被编译成本地机器代码,本地机器码被缓存到内存中,所以下次同样的方法被调用时这段机器码可以被复用。
JVM也可构建在硬件之上(相较于更为常见的软件方式),此时执行引擎嵌在芯片里。
JVM有时被称为JAVA解释器,这种说法并不准确,因为像JIT编译器就不是单纯的解释字节码了。因此所有的JAVA解释器都可以称之为JVM,但不是所有的JVM都是JAVA解释器。
当JVM构建于软件之上时,JAVA程序与宿主的交互依靠本地方法。
JAVA中有两种方法,java方法和本地方法。虽然java方法与平台无关,但是本地方法却不是。
本地方法是JAVA应用程序与宿主操作系统之间的桥梁。如果想让应用程序保持跨平台则应只用java方法,通过JAVA API来访问本地资源。