一、Java虚拟机
首先我们要了解Java程序执行有两步:编译、解释。
Java语言编写的程序经过编译,生成一种与平台无关的字节码( .class文件),而不会生成特定平台的机器码;但是这种字节码是不可执行的,需要使用Java解释器来解释执行,而Java虚拟机就负责解释。因为Java语言不是纯粹的编译型语言,也不是纯粹的解释型语言,它必须先编译再解释,即有了Java虚拟机的存在,负责解释。
其次,虚拟机是一种抽象的计算机,它通过在实际的计算机上仿真模拟各种计算机功能来实现。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还有相应的指令系统。Java虚拟机屏蔽了与操作系统平台相关的信息,是的Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改的运行,即Java虚拟机使Java语言拥有了跨平台特性。
JVM——Java Virtual Machine(Java虚拟机)
Java语言中负责解释执行字节码文件的是Java虚拟机,即JVM是可与运行Java字节码文件的虚拟计算机。
所有平台的JVM向编译器提供相同编程接口,而编译器只用面向虚拟机,生成虚拟机能理解的代码,然后又虚拟机执行。
Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码不面向任何具体平台,只面向JVM。
不同平台的JVM都是不同的,但他们提供相同的接口。JVM时Java程序跨平台的关键部分,只要为不同的平台实现了相同的虚拟机,编译后的Java字节码可在该平台上运行。
JVM分为向上向下两个部分,所有平台的JVM向上提供给Java字节码程序的接口相同,但是向下适应不同平台的接口则互不相同。 即不同平台上的Java字节码程序都是相同的,但是这个字节码程序无法适应不同平台,所以JVM将其转换为平台适应的程序。
参考自:
https://blog.csdn.net/ytm15732625529/article/details/80383343
https://blog.csdn.net/liyang_nash/article/details/78742623
二、 jre 、 jdk
JRE( Java Runtime Environment )Java运行环境,包含了Java虚拟机、Java基础类库,他是使用Java语言编写的程序运行所需要的软件环境,是提供给想要运行Java程序的用户使用的,还有所有的Java类库的class文件,都在lib目录下,并都打包成了jar。在操作系统上,虚拟机在/bin/client中的jvm.dll。
JDK( Java Development Kit )Java开发工具包,是程序员用Java语言编写的Java程序所需的开发工具包,是提供给程序员用的。jdk包含了Java源码编译器javac,Java程序调试和分析工具:jconsole,jvisualvm等工具软件,以及Java编写所需的文档和demo实例子程序。jdk包括了jre。
jre只能运行Java程序,而jdk可以开发Java程序。
参考自: