jvm 基本常识、及使用的是什么JDK和JAVA虚拟机?

2021-03-23  本文已影响0人  虾米咬小米

一、 JVM基本常识

程序的执行方式

[图片上传失败...(image-7fbfdd-1616490334420)]

字节码和机器码的区别

JDK、JRE、JVM的关系

image

Oracle JDK与OpenJDK

查看JDK版本

java -version
[root@localhost ~]# java -versio
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
Java HotSpot(TM) 64-Bit Server VM 表明, 此JDK的JVM是Oracle的64位HotSpot虚拟机, 
运行在Server模式下(虚拟机有Server和Client两种运行模式)
Java(TM) SE Runtime Environment (build 1.8.0_162-b12) 是Java运行时环境(即JRE)的版本信息
[root@localhost ~]# java -version
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

OpenJDK 的来历

Java由SUN公司(Sun Microsystems, 发起于美国斯坦福大学, SUN是Stanford University
Network的缩写)发明,2006年SUN公司将Java开源, 此时的JDK即为OpenJDK.

也就是说, OpenJDK是Java SE的开源实现, 它由SUN和Java社区提供支持,2009年Oracle收购了

Sun公司, 自此Java的维护方之一的SUN也变成了Oracle .
大多数JDK都是在OpenJDK的基础上编写实现的, 比如IBM J9, Azul Zulu, Azul Zing和Oracle JDK.
几乎现有的所有JDK都派生自OpenJDK, 它们之间不同的是许可证:

OpenJDK根据许可证GPL v2发布;
Oracle JDK根据Oracle二进制代码许可协议获得许可。

Oracle JDK的来历

Oracle JDK之前被称为SUN JDK, 这是在2009年Oracle收购SUN公司之前, 收购后被命名为Oracle JDK。

实际上, Oracle JDK是基于OpenJDK源代码构建的, 因此Oracle JDK和OpenJDK之间没有重大的技术差异。

Oracle的项目发布经理Joe Darcy在OSCON 2011 上对两者关系的介绍也证实了OpenJDK 7和Oracle JDK 7在程序上是非常接近的, 两者共用了大量相同的代码

Oracle JDK与OpenJDK的区别

OpenJDK使用的是开源免费的FreeType, 可以按照GPL v2许可证使用.GPL V2允许在商业上使用;
Oracle JDK则采用JRL(Java Research License,Java研究授权协议) 放出.JRL只允许个人研究使用,
要获得Oracle JDK的商业许可证, 需要联系Oracle的销售人员进行购买。

VM和Hotspot的关系

JVM是《JVM虚拟机规范》中提出来的规范.
Hotspot是使用JVM规范的商用产品,除此之外还有Oracle JRockit、IBM的J9也是JVM产品

JRockit是Oracle的JVM, 从Java SE 7开始, HotSpot和JRockit合并为一个JVM。

JVM和Java的关系

image

JVM的运行模式

JVM有两种运行模式:Server模式与Client模式。

两种模式的区别在于:

二、几种 jdk 区别

Oracle JDK之前被称为SUN JDK。 2009年Oracle收购SUN公司之后命名为Oracle JDK.
Oracle JDK是基于OpenJDK源代码构建的。
JVM: Java Virtual Machine / Java虚拟机
使用 java -version 查看JDK的版本

OpenJDK : HotSpot Java虚拟机(俗称Java VM或JVM)由两个主要组件组成:执行引擎和运行时。 Java VM和Java API组成了Java运行时环境,也称为JRE。


image.png

OracleJDK 8

如果是 OracleJDK, 显示信息为:

$ java -version

java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

说明:

JDK 版本 “1.8.0_60”, 支持 Java 8, 使用的是 Oracle 的64位HotSpot虚拟机。

AdoptOpenJDK 11

$ java -version

openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.4+11)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.4+11, mixed mode)

说明:

JDK 版本 “11.0.4”, 支持 Java 11, 使用的是 OpenJDK 64-Bit Server VM (HotSpot虚拟机)。

在 AdoptOpenJDK 官网下载 jdk 会有2个选择:

1. Choose a Version (选择Java版本) 

OpenJDK 8 (LTS)
OpenJDK 11 (LTS)
OpenJDK 13 (Latest)

2. Choose a JVM  (选择JVM) 

HotSpot  
OpenJ9

AdoptOpenJDK 也是基于OpenJDK源代码构建的。

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure.
Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

目前主流的 JVM 有:

HotSpot VM
Eclipse OpenJ9 VM
Azul Zing VM (Azul公司)

HotSpot VM:
HotSpot VM 是 OracleJDK / SunJDK 以及 OpenJDK 里的 JVM 实现。使用最广泛,JDK默认安装的。

HotSpot is the VM from the OpenJDK community. It is the most widely used VM today and is used in Oracle’s JDK. It is suitable for all workloads.

OpenJ9 VM:
OpenJ9 是一个独立实现的Java虚拟机。
OpenJ9 现在全名是 Eclipse OpenJ9 virtual machine (VM) 。
OpenJ9 是原来的 IBM J9 Java 虚拟机 (JVM), 2017年 IBM 将该项目捐献给了 Eclipse OMR project。

Eclipse OpenJ9 is the VM from the Eclipse community. It is an enterprise-grade VM designed for low memory usage and fast start-up and is used in IBM’s JDK. It is suitable for running all workloads.

Azul Zing VM
Azul Zing VM: Azul Systems 公司出品的 VM。

With the Zing® JVM you can:

[END]

参考:
原文英文: OpenJDK JRE 组成
中文
使用的是什么JDK和JAVA虚拟机?
jvm基本常识

上一篇 下一篇

猜你喜欢

热点阅读