JDK和JRE

gong_yz大约 2 分钟JVM

1. JDK和JRE

  • JDK:我们可以把java程序设计语言Java虚拟机Java类库这三部分统称为JDK(Java Development Kit)。JDK是支持Java开发的最小环境。
  • **JRE:**可以把Java类库API中的JavaSE的API子集Java虚拟机这两部分统称为JRE(Java Runtime Environment)。
image-20210611160739750

2. Java代码执行流程

执行流程如图所示:

  • Java编译器编译过程中,任何一个节点执行失败就会造成编译失败。
  • 虽然各个平台的Java虚拟机内部实现细节不尽相同,但是它们共同执行的字节码内容却是一样的。
  • JVM的主要任务就是付责将字节码装载到其内部,解释/编译为对应平台上的机器指令(即:汇编语言)执行。
  • Java虚拟机使用类加载器(Class Loader)装载class文件。
  • 类加载完成之后,会进行字节码校验,字节码校验通过之后JVM解释器会把字节码翻译成机器码(即:汇编语言)交由操作系统执行。
  • 但不是所有代码都是解释执行的,JVM对此作了优化/比如,以HotSpot虚拟机来说,它本身提供了JIT编译器
  • 有些方法和代码块是经常需要被调用的(也就是所谓的热点代码),引进了JIT编译器,而JIT编译器属于运行时编译。当JIT编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。

3. 虚拟机生命周期

3.1. 虚拟机的启动

Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initia class)来完成的,这个类是由虚拟机的具体实现指定的。

3.2. 虚拟机的执行

  • 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。
  • 程序开始执行时他才执行,程序结束时他就停止。
  • 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进行。

3.3. 虚拟机的退出

有如下的几种情况:

  • 程序正常执行结束。
  • 程序在执行过程中遇到了异常或错误而异常终止。
  • 由于操作系统出现错误而导致Java虚拟机进程终止。
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。