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