Linux系统-部署-运维系列导航

 

关于JVM、JRE与JDK

 

 
1. JVM(Java Virtual Mechinal)
Java虚拟机,是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。当使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。
 
2. JRE: Java Runtime Environment
java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,普通用户而只需要安装 JRE来运行 Java 程序。
 
3. JDK:Java Development Kit
java开发工具包,是使用java语言编写java程序所需的开发工具包。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
 
4 区别与联系
  1. JDK 用于开发,JRE 用于运行java程序 ;如果只是运行Java程序,可以只安装JRE,无序安装JDK。
  2. JDk包含JRE,JDK 和 JRE 中都包含 JVM。
  3. JVM 是 java 编程语言的核心并且具有平台独立性。
 

关于JDK发行版本

Java由SUN公司(Sun Microsystems, 发起于美国斯坦福大学, SUN是Stanford University Network的缩写)发明, 2006年SUN公司将Java开源, 此时的JDK即为OpenJDK。
就源代码而言,只有一套Java源代码,存在OpenJDK项目中。但只是源代码,不是发布版本。理论上,任何人都可以从源代码构建一个版本然后发布,但是这个发行版缺少认证,不能对外号称与Java SE兼容。 
所以一些企业、社区等供应商会自己构建、进行认证,然后发布,特别关注,Linux操作系统发行商一般都会提供内置JDK发行版本(软件源支持,并没有直接默认安装)。
常见JDK发行版本包括OracleJDK,OracleOpenJDK,AdoptOpenJDK,RedHatOpenJDK,Alibaba Dragonwell,Azul Zulu,Amazon Corretto等,供应商可以添加商标或者他们认为有用的其他实用程序。
根据普遍使用场景,本文介绍OracleJDK,OracleOpenJDK,AdoptOpenJDK,其他版本请自行了解。
 

1. OracleOpenJDK

OpenJDK是Java SE的开源实现, 它由SUN和Java社区提供支持, 2009年Oracle收购了Sun公司, 自此Java的维护方之一的SUN也变成了Oracle。
  • OpenJDK采用GPL V2协议放出,允许商用。
  • OpenJDK不能使用Java商标,在Sun被Oracle收购以后,Java这个商标就归Oracle所有了,OpenJDK执行“java -version”时显示OpenJDK,不会显示Java。
  • OpenJDK不包含Deployment(部署)功能:部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板。
  • OpenJDK源代码不完整,在采用GPL协议的OpenJDK中,sun jdk的一部分源代码因为产权的问题无法开放OpenJDK使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码,该部分功能可以通过插件形式补充。
  • OracleOpenJDK由Oracle定期发布,但新版本发布后,不再维护旧版本。
 

2. OracleJDK

Oracle收购SUN以后,构建并发布OracleJDK,即大家普遍熟悉的JDK,也是生产环境使用最多的JDK发行版本,拥有Java完整功能,以及OpenJDK没有的一些商用特性,同时,Oracle定期发布OracleJDK,但也会产期维护LTS的旧版本(目前Java SE 7,8,11,17,21为LTS版本),所以功能性、稳定性、安全性要高于OpenJDK。不过,作为OpenJDK社区的主导者,Oracle也在尽量减少OpenJDK和Oracle JDK的差别(source),将一些商业特性移植到了OpenJDK上,比如Java Flight Recorder,Java Mission Control和ZGC等。
对于普通开发者,两者差异可忽略不计。
 
2019年4月16日以及之前发布的 OracleJDK 授权许可协议是BCL协议,即Oracle Binary Code License Agreement,协议规定我们可以使用JDK,但是不能进行修改。私用和商用都可以。
 
2019年4月16日,Oracle发布了新的JDK 8的更新,版本号为8u211和8u212。与以往不同的是,新版本的许可协议从BCL换成了OTN,即Oracle Technology Network License Agreement,目前新发布的JDK用的都是这个协议,可以私用以及研发用,商用需要付费,这就意味着,我们不能在生产环境使用这个版本了。所以,OracleJDK最后的免费版本为2019年1月15日发布的Oracle JDK 8u201和8u202。
 
特别关注:关于OracleJDK每次发布2个版本号,请参照附录
 
下图表示两种许可协议的区别

 

下图表示各个版本对应的许可协议

特别关注:OracleJDK与JRE

OracleJDK 8及以前版本,安装后在JDK目录下会提供一个JRE目录,功能同单独JRE,但从OracleJDK 9开始不再包含JRE目录。
OracleJDK 10及以前版本,都提供独立的JRE安装包下载,但OracleJDK 11及以后版本,不再提供独立的JRE安装包下载,JDK满足开发与运行环境。

 

3. AdoptOpenJDK

2017年,一群Java用户组(JUG)成员、开发者和供应商(包括亚马逊、微软、Pivotal、Redhat等)建立了一个社区称作AdoptOpenJDK。他们提供免费、稳固的OpenJDK build,可用性与更新周期更长。甚至还有两个不同的Java虚拟机可供选择:HotSpot和OpenJ9,请参考两种虚拟机测试对比,其中,HotSpot为JVM默认类型,OpenJ9为IBM优化版。
AdoptOpenJDK官网提供OpenJDK包自定义构建选择,支持OpenJDK版本选择与JVM类型选择。
2021年7月24日,AdoptOpenJDK开始迁移至Eclipse基金会维护,AdoptOpenJDK的发布也将根据JVM类型分别到相应的平台下载:
HotSpot OpenJDK 发布在adoptium.net,OpenJ9 OpenJDK发布在 IBM开发者中心,或者可以从各大镜像源平台获取,如清华镜像源AdoptOpenJDK
 
特别关注:各操作系统供应商默认集成的OpenJDK为OracleOpenJDK,但根据Oracle后续的授权协议以及各OpenJDK供应商的政策,不排除操作系统默认集成的版本会变更,请开发者关注。
 

AdoptOpenJDK安装

本文介绍
AdoptOpenJDK安装。
特别关注:CPU架构
获取安装包之前,确认Linux服务器的CPU架构,如果服务器架构与JDK不符,则无法运行
#arm架构
[app@ecs-4bcb-0003 ~]$ arch
aarch64
[app@ecs-4bcb-0003 ~]$ uname -a
Linux ecs-4bcb-0003.novalocal 4.19.90-23.8.v2101.ky10.aarch64 #1 SMP Mon May 17 17:07:38 CST 2021 aarch64 aarch64 aarch64 GNU/Linux
[app@ecs-4bcb-0003 ~]$  cat /proc/version
Linux version 4.19.90-23.8.v2101.ky10.aarch64 (KYLINSOFT@localhost.localdomain) (gcc version 7.3.0 (GCC)) #1 SMP Mon May 17 17:07:38 CST 2021

#x86架构
[app@host-10-169-3-54 ~]$ arch
x86_64
[app@host-10-169-3-54 ~]$ uname -a
Linux host-10-169-3-54 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[app@host-10-169-3-54 ~]$ cat /proc/version
Linux version 3.10.0-957.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 8 23:39:32 UTC 2018

 

组件安装操作步骤参考 组件安装部署手册模板,根据不同组件的安装目标,部分操作可以省略。
本文将按照该参考步骤执行。
 

一、获取组件可执行程序库,包括主程序,此为组件的基本文件

AdoptOpenJDK建议使用二进制文件安装。
创建目录 /usr/local/jdk,将rpm包下载到该目录下
1.1 AdoptOpenJDK - HotSpot JVM

 

1.2 AdoptOpenJDK - OpenJ9 JVM

 

 

2 解压安装
2.1 HotSpot JVM
所有程序文件都保存在解压目录下
[root@localhost jdk]# tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u322b06.tar.gz 
[root@localhost jdk]# cd jdk8u322-b06/
[root@localhost jdk8u322-b06]# ll
总用量 51732
-r--r--r--  1 root root     1522 1月  19 20:30 ASSEMBLY_EXCEPTION
drwxr-xr-x  2 root root     4096 1月  19 20:30 bin
drwxr-xr-x  3 root root      132 1月  19 20:30 include
drwxr-xr-x  4 root root       95 1月  19 20:30 jre
drwxr-xr-x  3 root root      144 1月  19 20:30 lib
-r--r--r--  1 root root    19274 1月  19 20:30 LICENSE
drwxr-xr-x  4 root root       47 1月  19 20:30 man
-rw-r--r--  1 root root     2401 1月  19 20:30 NOTICE
-rw-r--r--  1 root root      454 1月  19 20:30 release
drwxr-xr-x 10 root root      151 1月  19 20:30 sample
-rw-r--r--  1 root root 52776682 1月  19 20:30 src.zip
-r--r--r--  1 root root   157063 1月  19 20:30 THIRD_PARTY_README
[root@localhost jdk1.8.0_321]# 

 

2.2 OpenJ9 JVM
[root@localhost jdk]# tar -zxvf OpenJDK8U-jdk_x64_linux_openj9_linuxXL_8u282b08_openj9-0.24.0.tar.gz
[root@localhost jdk]# cd jdk8u282-b08/
[root@localhost jdk8u282-b08]# ll
总用量 53332
-r--r--r--  1 root root     1522 1月  20 2021 ASSEMBLY_EXCEPTION
drwxr-xr-x  2 root root     4096 1月  20 2021 bin
-rw-r--r--  1 root root    17300 1月  20 2021 epl-2.0.html
drwxr-xr-x  3 root root      150 1月  20 2021 include
drwxr-xr-x  4 root root       95 1月  20 2021 jre
drwxr-xr-x  3 root root      126 1月  20 2021 lib
-r--r--r--  1 root root    19650 1月  20 2021 LICENSE
drwxr-xr-x  4 root root       47 1月  20 2021 man
-rw-r--r--  1 root root    33947 1月  20 2021 openj9-notices
-rw-r--r--  1 root root     6384 1月  20 2021 openj9-openjdk-notices
-rw-r--r--  1 root root      380 1月  20 2021 release
drwxr-xr-x 10 root root      151 1月  20 2021 sample
-rw-r--r--  1 root root 54357086 1月  20 2021 src.zip
-r--r--r--  1 root root   155003 1月  20 2021 THIRD_PARTY_README

 

二、安装系统服务

jdk为java程序运行环境,无需独立运行,即无需安装系统服务
 

三、主程序加入到环境变量

1.rpm安装完成后,自动在环境变量目录 /usr/bin/ 创建java主程序文件
 
2.二进制安装完成后,需要手动配置环境变量
编辑 /etc/profile 文件,增加如下内容,然后执行 source /etc/profile 使环境变量生效
#java env
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

 

四、配置文件

jdk为java程序运行环境,无需独立运行,即没有配置文件
 

五、运行用户

jdk为java程序运行环境,无需独立运行,即无需运行用户
 

六、开机启动

jdk为java程序运行环境,无需独立运行,即无需配置开机启动
 

七、服务启动运行

验证jdk安装效果,使用OracleJDK会显示Java商标
1. HotSpot JVM
[root@localhost jdk8u322-b06]# java -version
openjdk version "1.8.0_322"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_322-b06)
OpenJDK 64-Bit Server VM (Temurin)(build 25.322-b06, mixed mode)

 

2. OpenJ9 JVM
[root@localhost jdk8u282-b08]# java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
Eclipse OpenJ9 VM (build openj9-0.24.0, JRE 1.8.0 Linux amd64-64-Bit 20210120_869 (JIT enabled, AOT enabled)
OpenJ9   - 345e1b09e
OMR      - 741e94ea8
JCL      - ab07c6a8fd based on jdk8u282-b08)

 

附录:AdoptOpenJDK与JRE

AdoptOpenJDK安装后在JDK目录下会提供一个JRE目录,且提供单独JRE下载。
 

附录:AdoptOpenJDK通过第三方镜像源下载

  

posted on 2023-09-05 13:36  xiaoyaozhe  阅读(1485)  评论(0编辑  收藏  举报