JVM它是Java Virtual Machine 的缩写,主要是通过在实际计算机模仿各种计算机功能来实现的,组成部分包括堆、方法区、栈、本地方法栈、程序计算器等部分组成的,其中方法回收堆和方法区是共享区,也就是谁都可以使用,而栈和程序计算器、本地方法栈区是归JVM的。Java能够被称为“一次编译,到处运行”的原因就是Java屏蔽了很多的操作系统平台相关信息,使得Java只需要生成在JVM虚拟机运行的目标代码也就是所说的字节码,就可以在多种平台运行
虚拟机是一种抽象化的机器,可以执行抽象化的指令。一般分为:系统级虚拟机和程序级虚拟机。
了解了什么是虚拟机,我们再看什么是 Java虚拟机。
Java虚拟机可以看做是一台抽象的计算机,如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域,它与Java语言没有必然的联系,只与特定的二进制文件——class 文件格式关联(字节码文件),可以通过Java语言或者其他语言编写的程序编译成class文件,然后在Java虚拟机上运行。Java虚拟机有以下二个特点:
①、语言无关
Java虚拟机只和class文件关联,所以只要你编写程序的语言能够编译成class文件,那么都能够在Java虚拟机上运行。
②、平台无关
Java从诞生之初就宣传的一个口号:一次编写,到处运行。
也就是说Java是一个跨平台的语言,那么Java是如何实现跨平台的呢?
其实Java之所以跨平台是因为Java虚拟机的适配,不同的系统实现不同的Java虚拟机。Java虚拟机就相当于操作系统和应用程序之间的中介,每种平台安装适应该平台的Java虚拟机,那么我们编写的程序当然能够在任意平台运行。
Sun Classic VM是最早的商用虚拟机,但是由于技术所限他的运行速度特别的慢.
由于一开始的虚拟机运行编译代码太慢,java的开发团队一直优化,并且有了Exact VM这个高性能虚拟机的模型
Sun HotSpot VM是我们见得最多的虚拟机,它是前身是一家小公司以开发一个相当于c 50%以上性能的虚拟机为目的开发的优秀的虚拟机,最终这家公司被Sun公司收购,Sun HotSpot VM集合了前两个虚拟机的优点
目前为止JDk发布到了1.8版本,默认使用的虚拟机都是HotSpot