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供应商的政策,不排除操作系统默认集成的版本会变更,请开发者关注。
 

OracleJDK安装

本文介绍OracleJDK安装,以JDK 8u201为例。
特别关注: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

 

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

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

OracleJDK支持rpm安装与二进制文件安装。

1.rpm安装

创建目录 /usr/local/jdk,将rpm包下载到该目录下
特别关注:Oracle官方启用了相关权限验证,无法通过wget下载文件

 

1.2 安装
[root@localhost jdk]# rpm -ivh jdk-8u201-linux-x64.rpm 
警告:jdk-8u201-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:jdk1.8-2000:1.8.0_201-fcs        ################################# [100%]
Unpacking JAR files...
    tools.jar...
    plugin.jar...
    javaws.jar...
    deploy.jar...
    rt.jar...
    jsse.jar...
    charsets.jar...
    localedata.jar...
 [root@localhost jdk]#

 

1.3 确认安装目录
安装完成后,主程序文件保存在 /usr/java/jdk1.8.0_201-amd64/,并在 /usr/bin、/var/lib等目录下创建软连接
[root@localhost jdk]# find / -name java
/etc/alternatives/java
/var/lib/alternatives/java
/usr/bin/java
/usr/local/temp/jdk1.8.0_201/bin/java
/usr/local/temp/jdk1.8.0_201/jre/bin/java
/usr/java
/usr/java/jdk1.8.0_201-amd64/bin/java
/usr/java/jdk1.8.0_201-amd64/jre/bin/java

 

2.二进制文件安装

创建目录 /usr/local/jdk,将二进制包下载到该目录下
特别关注:Oracle官方启用了相关权限验证,无法通过wget下载文件

 

2.2 解压安装
所有程序文件都保存在解压目录下
[root@localhost jdk]# tar -zxvf jdk-8u201-linux-x64.tar.gz 
[root@localhost jdk]# cd jdk1.8.0_201/
[root@localhost jdk1.8.0_201]# ll
总用量 25816
drwxr-xr-x 2 10143 10143     4096 12月 16 03:27 bin
-r--r--r-- 1 10143 10143     3244 12月 16 03:27 COPYRIGHT
drwxr-xr-x 3 10143 10143      132 12月 16 03:27 include
-rw-r--r-- 1 10143 10143  5236122 12月 16 00:44 javafx-src.zip
-rw-r--r-- 1 10143 10143      195 12月 16 03:27 jmc.txt
drwxr-xr-x 6 10143 10143      198 12月 16 03:27 jre
drwxr-xr-x 4 10143 10143       31 12月 16 03:27 legal
drwxr-xr-x 4 10143 10143      223 12月 16 03:27 lib
-r--r--r-- 1 10143 10143       44 12月 16 03:27 LICENSE
drwxr-xr-x 4 10143 10143       47 12月 16 03:27 man
-r--r--r-- 1 10143 10143      159 12月 16 03:27 README.html
-rw-r--r-- 1 10143 10143      123 12月 16 03:27 release
-rw-r--r-- 1 10143 10143 21160792 12月 16 03:27 src.zip
-rw-r--r-- 1 10143 10143      190 12月 16 00:44 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r-- 1 10143 10143      190 12月 16 03:27 THIRDPARTYLICENSEREADME.txt
[root@localhost jdk1.8.0_201]# 

 

二、安装系统服务

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商标
[root@localhost jdk1.8.0_201]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@localhost jdk1.8.0_321]# 

 

附录:OracleJDK每次发布2个版本号

从 2014 年 10 月发布 Java SE 7 Update 71 (Java SE 7u71) 开始,Oracle在发布Oracle JDK关键补丁更新 (CPUs:Critical Patch Updates) 的同时一般会发布相应的补丁集更新 (PSUs:Patch Set Updates)。那么CPUs和PSUs之间有什么区别呢?
  1. Oracle JDK 关键补丁更新 (CPUs) 包含安全漏洞修复和重要漏洞修复,Oracle 强烈建议所有Oracle JDK用户及时升级到最新的 CPU 版本,Oracle JDK 关键补丁更新 (CPUs) 版本号采用奇数编号!
  2. Oracle JDK 补丁集更新 (PSUs) 包含相应 CPUs 中的所有修复以及其他非重要修复,仅当您受到Oracle JDK关键补丁更新 (CPUs)版本之外的其他漏洞的影响时才应当使用相应的补丁集更新 (PSUs) ,Oracle JDK 补丁集更新 (PSUs) 版本号采用偶数编号!
所以,一般情况下我们只要下载奇数编号的最新版本更新就行了!
 
posted on 2023-09-05 13:38  xiaoyaozhe  阅读(131)  评论(0编辑  收藏  举报