一、Java 技术体系

1.1 Java 技术体系的组成部分

  • Java 语言
  • 各种硬件平台的虚拟机实现
  • Class 文件格式(JVM 的底层支持)
  • Java 类库 API
  • 来自商业机构和开源社区的第三方 Java 类库

1.2 JDK 和 JRE

​ JDK 和 JRE 是按照 Java 各个组成部分的功能来划分的:

  • JDK:JDK 是用于支持 Java 程序开发的最小环境,包括 Java 语言、Java 虚拟机、Java 类库,所以可以用 JDK 来代替 Java 技术体系
  • JRE:JRE 是支持 Java 程序 运行 的最小环境:包括 Java 类库 API 中的 Java SE API 子集和 Java 虚拟机

在这里插入图片描述

1.3 JAVA 四条主要的产品线

​ Java 技术体系可以按照所关注的重点业务划分出四条主要的产品线:

  • JAVA Card:支持 Java 小程序运行在小内存设备上的平台。
  • Java ME:支持 Java 程序运行在移动终端的平台。注:用 Java 语言开发的 Android 并不属于 Java ME。
  • Java SE:支持面向桌面级应用的 Java 平台,JDK 6 以前称为 J2SE。
  • Java EE:支持使用多层架构的企业级应用的 Java 平台,JDK6 以前称为 J2EE,JDK10 以后 Oracle 捐给 Eclipse 基金会,称为 Jakarta EE。

二、Java 虚拟机家族

2.1 虚拟机始祖:Classic VM 和 Exact VM

  • Classic VM:该款编译器只能使用纯解释器方式来执行 Java 代码,如果要使用即时编译器就必须外挂。但是外挂了即时编译器后,解释器就不能工作了,这就意味着如果不用编译器,那么执行所有代码都需要解释执行,对于循环、重复的方法调用这些代码都需要每次都解释;但是如果用了编译器,又会把每一行代码都编译,而不管其是否具有编译价值。
  • Exact VM:Sun 公司为了解决 Classic 虚拟机面临的问题,再 JDK1.2 时提出了 Exact VM,该虚拟机具有热点探测、两级即时编译器、编译器与解释器混合工作模式等。而且它使用了准确式内存管理,这种机制可以让虚拟机知道内存中某个位置的数据具体是基本数据还是对象的引用,这时在垃圾收集时准确判断堆上的数据是否还能被使用的前提。

2.2 使用最多的虚拟机:HotSpot VM

  • HotSpot VM:在 Exact VM 诞生后还未来得及使用时,就被 HotSpot VM 所替代。HotSpot 并不是由 Sun 公司开发,而是一个小公司开发的。HotSpot 与 Exact VM 很类似,都有热点探测、准确式内存管理以及编译器和解释器混合工作的特点,但是最后经过 Sun 公司内部的争论选择了 HotSpot,书上描述这个选择并不是技术上的胜利。

2.3 最快的虚拟机:JRockit VM 和 J9 VM

  • JRockit VM:JRockit VM 专注于服务端,不太关注程序的启动速度,因此它内部不包含解释器的实现,全部代码都靠及时编译后执行,因此它当时号称世界上速度最快的虚拟机。
  • J9 VM:J9 VM 由 IBM 开发,这是一款定制类的虚拟机,它是在自己的产品上速度很快。

2.4 与硬件耦合的虚拟机:Liquid VM 和 Azul VM

​ 这两款虚拟机分别由 BEA 和 Azul 公司开发,它们都与自家硬件高度耦合。

2.5 未来趋势,无语言倾向的虚拟机:Graal VM

  • Graal VM:Graal VM 是 Oracle 在 2018 年发布的一项黑科技,它是在 HotSpot VM 基础上在增强而成的跨语言全站虚拟机,可以作为任何语言的使用平台,包括 Java、Scala、Kotlin 等基于 Java 虚拟机之上的语言,也包括 C、C++ 等基于 LLVM 的语言,同时支持像 JavaScript、Pyton 等纯解释性语言。

    它的实现原理是将这些语言的源代码(如 JavaScript)或源代码编译后的中间格式(如 LLVM 字节码)通过解释器转换成能被 Graal VM 接受的中间表示。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐