一、 JVM基本常识
程序的执行方式
- 主要有三种:静态编译执行、动态编译执行、动态解释执行
[图片上传失败...(image-7fbfdd-1616490334420)]
字节码和机器码的区别
- 机器码是电脑cpu直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,编写起来也比较难。
- 字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器后才能成为机器码
JDK、JRE、JVM的关系
Oracle JDK与OpenJDK
查看JDK版本
java -version
- 1) 如果是sun/oracle JDK 显示信息为:
[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)的版本信息
- 2) 如果OpenJDK, 显示信息为:
[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的关系
JVM的运行模式
JVM有两种运行模式:Server模式与Client模式。
两种模式的区别在于:
- Client模式启动速度较快,Server模式启动较慢;
- 但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。
- 因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;
而Client模式启动的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。
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:
- Increase cluster carrying capacity by up to 70% or more
- Meet required service delivery levels without constant tuning
- Deliver a better end-user experience
- Reduce operational costs and capital spending
- Redeploy Engineering resources away from JVM issues
[END]