从0学java第1篇--对java的粗浅理解

对java的粗浅理解

对java有过简单了解的人都听说过java是”一次书写,到处运行”这一大特点,这个说的就是java的跨平台的特性。但是这种特性并不只是java才有的,java只是比较成熟一些而已。

所谓的”一次书写,到处运行”指的是我们编写好的程序,通过javac编译后,变成.class文件的字节码,.class就是可以到处运行的文件,但是这种文件不可以直接在机器上执行,需要使用jvm这种跨平台的抽象环境,将字节码转化成目标机器代码,这样就可以实现导出运行了。

编译执行还是解释执行?

对java而言,在程序执行的时候,jvm将字节码解释成机器可以识别的机器码。但是在我们通常使用的jvm中,都提供了 JIT(Just-In-Time)编译器,JIT可以在运行的时候将热点代码编译成机器码,这种情况下热点代码就属于编译执行了。

常见的名词

在开发过程中我们经常会听到javac、jvm、jre、jdk这些名词,我们理一下他们都是什么。

  • javac是一个编译器,用于将我们编写好的代码编译成以.class为后缀的字节码。

  • jvm就是java虚拟机,我们写好的代码并不直接在真实的目标机器上执行,而是通过javac编译后生成字节码,java虚拟机会把这些字节码解释成目标机器可以识别的机器码执行。

  • jre就是java运行的环境,在jvm解释字节码的时候,jvm需要调用一些解释所必须的类库,这些必要的类库都是在jre的lib中。所以可以简单的理解为jre包含jvm和所需的lib两部分。

  • jdk是java的一个开发工具包,我们在开发java程序之前,都会安装一个jdk,jdk主要包含javac、jre和一些类库。

以上的关系可以看出,jdk包含了jre,jre包含了jvm。jdk包含了编译必须使用的javac。