专栏首页WriteOnReadJVM笔记-Java技术体系与JVM概述

JVM笔记-Java技术体系与JVM概述

1. 简述

Java 不仅仅是一门编程语言,还是一个由一系列计算机软件和规范组成的技术体系。

Java 的广告词为 "一次编写,到处运行",之所以能够做到"跨平台",是因为每个平台上不同的虚拟机屏蔽了硬件的差异,而 Java 程序则是运行在虚拟机之上的。

本文简要介绍 Java 技术体系及 Java 虚拟机(Java Virtual Machine, JVM)的相关发展历程,后文再进一步分析 Java 虚拟机的详细内容。

PS: 本文及接下来的 JVM 笔记内容主要来自周志明《深入理解 Java 虚拟机(第3版)》。

2. Java技术体系

广义上讲,Kotlin、Groovy、JRuby 等运行于 Java 虚拟机上的编程语言及其相关程序都属于 Java 技术体系。

而从传统意义上来看,JCP 官方定义的 Java 技术体系主要包括:

  • Java 程序设计语言
  • 各种硬件平台上的 Java 虚拟机
  • Class 文件格式
  • Java 类库 API
  • 商业机构和开源社区的第三方 Java 类库

其中 Java 程序设计语言、Java 虚拟机、Java 类库三部分统称为 JDK(Java Development Kit),JDK 是支持 Java 程序开发的最小环境。

Java 类库 API 中的 Java SE API 子集和 Java 虚拟机统称为 JRE(Java Runtime Environment),JRE 是支持 Java 程序运行的标准环境。

PS: JCP 全称 Java Community Process,即 Java 社区,由业界多家技术巨头组成的社区,用于定义和发展 Java 的技术规范。

Java 技术体系包含的内容如下:

3. JVM家族

"Java 虚拟机" 只是一个概念,它的实现产品众多,下面简要介绍其发展历程。

Sun Classic/Exact VM

  • Class VM (JDK 1.0)
    • 世界上第一款商用 Java 虚拟机
    • 纯解释器方式执行 Java 代码
    • 对象查找基于句柄
  • Exact VM (JDK 1.2)
    • 准确式内存管理:虚拟机可以知道内存中某个位置的数据具体类型

HotSpot VM

  • Sun/OracleJDK 和 OpenJDK 中默认虚拟机
  • 目前使用范围最广的 Java 虚拟机

由于 HotSpot 虚拟机是目前使用最广泛的,而且是目前 OracleJDK 和 OpenJDK 的默认虚拟机,后文的内容分析主要是针对该虚拟机。

终端执行 java -version 命令如下(不同机器会有所不同,此处仅供参考):

$ java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

这里的 HotSpot(TM) 64-Bit Server VM 指的就是 HotSpot 虚拟机。

Mobile/Embedded VM

  • Java ME 虚拟机

BEA JRockit/IBM J9 VM

这两个虚拟机曾与 HotSpot 虚拟机并称"三大商业 Java 虚拟机"。

  • JRockit
    • 专注于服务端应用
    • 不含解释器,全部代码都由即时编译器编译后执行
  • J9 VM
    • 职责分离与模块化优于 HotSpot VM

BEA Liquid VM/Azul VM

  • 与特定硬件平台绑定、软硬件配合的专有虚拟机

Apache Harmony/Google Android Dalvik VM

这两者是 "虚拟机",而非 "Java 虚拟机"。

  • Harmony VM
    • 未通过 TCK 认证
    • 未大规模商用
  • Dalvik VM
    • 未遵循《Java 虚拟机规范》
    • 不能直接执行 Java 的 Class 文件

Microsoft JVM

  • 曾经是 Windows 系统下性能最好的 Java 虚拟机

其他

  • KVM:曾在手机平台上得到广泛应用
  • Java Card VM
  • ……

其他还有很多各种各样的虚拟机,不再一一列举。值得注意的是一个比较新的 Java 虚拟机:Graal VM。

Graal VM

2018 年 4 月,Oracle Labs 公开的黑科技:Graal VM。

Graal VM 被官方称为"Universal VM"和"Polyglot VM",它是在 HotSpot 虚拟机基础上增强而成的跨语言全栈虚拟机。可作为"任何语言"的运行平台,包括:

  • Java、Scala、Groovy、Kotlin 等基于 Java 虚拟机之上的语言
  • C、C++、Rust 等基于 LLVM 的语言,同时支持 JavaScript、Ruby、Python 等

如图所示:

而且自 JDK 10 起,HotSpot 中又加入了一个全新的即时编译器:Graal 编译器。

如若将来某一天 HotSpot 虚拟机真的被替换,Graal VM 很有可能"上位"。

4. 小结

本文主要介绍了 Java 技术体系和 Java 虚拟机的发展历程,该部分内容了解即可,后文再分析虚拟机的主要内容。

为便于回顾和总结,这里将上述内容整理成了思维导图:

本文分享自微信公众号 - WriteOnRead(WriteOnRead),作者:jaxer

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM笔记-运行时内存区域划分

    Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。它们各有用途,有些随着虚拟机进程的启动一直存在(堆、方法区),有些则随...

    WriteOnRead
  • JDK源码分析-LinkedList

    LinkedList 内部是一个双向链表,并且实现了 List 接口和 Deque 接口,因此它也具有 List 的操作以及双端队列和栈的性质。双向链表的结构如...

    WriteOnRead
  • JVM笔记-内存分配策略

    Java 技术体系的自动内存管理,最根本的目标就是解决两个问题:「自动化」地给对象分配、回收内存空间。

    WriteOnRead
  • 一日一技:如何正确获取 MongoDB 集合里面的最后一条数据

    在我们使用 Python 查询 MongoDB 的时候,一般会使用MongoDB 的集合(collection)对象的 find()方法或者find_one()...

    青南
  • JVM本地方法栈&堆

    上一节我们介绍了程序计数器和Java虚拟机栈,今天我们一起了解一下关于本地方法栈和Java堆的相关知识。

    shysh95
  • 15 个 Kubectl 现有命令使用技巧 - 拿来即用

    公众号: 云原生生态圈
  • 作为程序员,你必须了解这些关于计算机的知识

    我是攻城师
  • 凌晨整理--应届生校招Java研发岗需要学习哪些知识点?

    最近很多同学问我关于校招 Java研发工程师 岗位的要求,因为只有先知道了要求,再结合自身的情况,做好学习计划。

    程序员小跃
  • H3C技术系列 | H3C端口镜像配置

    [H3C]mirroring-group 1 mirroring-port g1/0/2 both 设置源端口(both全部流量,inbound入流量,outb...

    网络技术联盟站
  • [688]局域网中如何用一台电脑xshell连接另一台电脑虚拟机

    主机端口可以随便设置,后面通过xshell连接的时候就是这个设置的端口,xshell连接的ip为主机的ip,非虚拟机的ip

    周小董

扫码关注云+社区

领取腾讯云代金券