java跨平台究竟是咋回事?Jdk、jre、jvm到底有啥不一样?

从刚开始学习java开始,就一直听说java是跨平台的语言,但是很难理解到底是如何跨平台的

啥叫编程?

首先我们理解一下我们安装jdk会生成一个jdk的文件目录,一个jre的文件目录,那么jdk就是对我们写的代码进行解码操作的工具,当然还有其他的功能。而jre就是我们的常说的java的运行环境。我们通过这个运行环境,就可以实现跨平台的操作。
为啥有了java虚拟机就可以实现?首先我们说到操作系统,操作系统的作用是用于软件与硬件之间的交互,而不同的操作系统,其交互的方式都是不一样的,比如我们有windows、linux的等等。
所以开发一个软件出来或者程序出来,这个文件就要被操作系统所识别,然后交给硬件执行,但不是一个操作系统,所以这就会导致我们的文件被操作系统所不能识别清楚。
我们编程很多就是基于操作系统上的编程,但是java打破了这个局面。
它使用一个虚拟机的技术,,,呃呃呃,,说的很高大上,但是它其实就相当于一台使用的是java底层开发出来的计算机,帮助我们有效读取我们的程序,然后在不同的平台,实现不同的编译。可以说,我们使用java编程,就是在面向jvm编程开发。
但是jvm虚拟机的作用不止于跨平台!
首先我们说个比较常用的叫热点代码,热点代码就是访问频率比较高的一段代码,而在jvm中,对于这种代码,jvm是直接编译执行的,编译执行的意思是利用事先编写好的成为编写程序的机器语言程序,作为系统软件存放在计算机内,当高级语言源程序进入计算机,被这个翻译成目标程序,以完成源码要处理的运算并取得结果。而非热点代码就是解释执行,解释方式是源程序进入计算机内,解释程序边扫描边解释,逐句输入逐句翻译,计算机一步一步执行,并不产生目标程序。
编译执行的效率要高于解释执行的效率。
用一个图就能很好的理解
java跨平台究竟是咋回事?Jdk、jre、jvm到底有啥不一样?
Jdk、jre、jvm之间的区别和联系:

  1. JDK
      JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品。
      JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。
      JDK是整个JAVA的核心,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
      ①SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
      ②EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
      ③ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
  2. JRE
      是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
      JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。
      与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。
  3. JVM
      就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
      也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
      只有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。
      JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

简单来说 就是这样的!
java跨平台究竟是咋回事?Jdk、jre、jvm到底有啥不一样?