jdk21下载、安装(Windows、Linux、macOS)
Windows 系统
1. 下载安装
访问 Oracle 官方 JDK 下载页面 或 OpenJDK 下载页面,根据自己的系统选择合适的 Windows 版本进行下载(通常选择 .msi 安装包)。




2. 配置环境变量
右键点击 “此电脑”,选择 “属性”。
在左侧导航栏中点击 “高级系统设置”。
在弹出的 “系统属性” 窗口中,点击 “环境变量” 按钮。
配置 JAVA_HOME 变量:
- 在 “系统变量” 区域,点击 “新建” 按钮。
- 在 “变量名” 输入框中输入
JAVA_HOME,在 “变量值” 输入框中输入 JDK 21 的安装路径,例如C:\Program Files\Java\jdk-21。 - 点击 “确定” 保存。

配置 Path 变量:
- 在 “系统变量” 区域找到
Path变量,选中它并点击 “编辑” 按钮。 - 点击 “新建”,添加以下两个路径:
-
%JAVA_HOME%\bin%JAVA_HOME%\jre\bin(如果 JDK 21 包含 JRE 的话).;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
- 点击 “确定” 保存。

3. 验证安装
打开命令提示符(CMD),输入以下命令:
java -version
javac -version

Linux 系统
1. 下载 JDK 21
- 访问 OpenJDK 下载页面,下载适用于 Linux 的
.tar.gz压缩包。
2. 安装 JDK 21
- 打开终端,使用以下命令将下载的压缩包解压到指定目录,例如
/usr/local/java:
sudo mkdir /usr/local/java
sudo tar -zxvf jdk-21.*.tar.gz -C /usr/local/java
3. 配置环境变量
- 打开终端,编辑
~/.bashrc或/etc/profile文件(~/.bashrc是用户级配置,/etc/profile是系统级配置):
sudo vim ~/.bashrc
- 在文件末尾添加以下内容:
export JAVA_HOME=/usr/local/java/jdk-21
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 保存并退出文件,然后执行以下命令使配置生效:
source ~/.bashrc
4. 验证安装
java -version
javac -version
如果能够正确显示 JDK 21 的版本信息,则说明安装和配置成功。
macOS 系统
1. 下载 JDK 21
- 访问 Oracle 官方 JDK 下载页面 或 OpenJDK 下载页面,下载适用于 macOS 的
.dmg安装包。
2. 安装 JDK 21
- 双击下载好的
.dmg安装包,按照安装向导的提示进行操作。
3. 配置环境变量
- 打开终端,编辑
~/.bash_profile或~/.zshrc文件(如果使用的是 Zsh 终端):
vim ~/.zshrc
- 在文件末尾添加以下内容:
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
export PATH=$JAVA_HOME/bin:$PATH
- 保存并退出文件,然后执行以下命令使配置生效:
source ~/.zshrc
4. 验证安装
- 在终端中输入以下命令:
java -version
javac -version
如果能够正确显示 JDK 21 的版本信息,则说明安装和配置成功。
多个 jdk 版本如何切换
windows 系统
1. 安装多个 JDK 版本
首先,按照正常的安装流程在系统中安装多个不同版本的 JDK,例如 JDK 8 和 JDK 21,并记住它们各自的安装路径。
2. 配置环境变量
为每个 JDK 版本设置独立的环境变量,以方便后续切换。
- 右键点击 “此电脑”,选择 “属性”。
- 在左侧导航栏中点击 “高级系统设置”。
- 在弹出的 “系统属性” 窗口中,点击 “环境变量” 按钮。
- 新建环境变量:
-
- 分别为不同版本的 JDK 创建对应的环境变量,例如
JDK8和JDK21,变量值分别为 JDK 8 和 JDK 21 的安装路径。 JDK8:C:\Program Files\Java\jdk1.8.0_xxxJDK21:C:\Program Files\Java\jdk-21
- 分别为不同版本的 JDK 创建对应的环境变量,例如
- 修改
JAVA_HOME变量:
JAVA_HOME是用于指定当前使用的 JDK 版本的关键变量。当需要切换 JDK 版本时,只需修改JAVA_HOME的值。例如,要使用 JDK 8,将JAVA_HOME的值设置为%JDK8%;要使用 JDK 21,将其值设置为%JDK21%。 - 修改
Path变量:
确保Path变量中引用的是%JAVA_HOME%\bin,这样每次修改JAVA_HOME后,Path也会相应更新。

3. 验证切换
每次修改 JAVA_HOME 后,打开新的命令提示符窗口,输入以下命令验证 JDK 版本是否切换成功
java -version
Linux 系统
1. 安装多个 JDK 版本
使用包管理器或手动解压安装包的方式在系统中安装多个不同版本的 JDK。
2. 配置环境变量
编辑 ~/.bashrc 或 /etc/profile 文件,为每个 JDK 版本设置独立的环境变量,并添加切换函数。
# 定义不同 JDK 版本的路径
export JAVA_HOME_8=/usr/local/java/jdk1.8.0_xxx
export JAVA_HOME_21=/usr/local/java/jdk-21# 定义切换 JDK 版本的函数
switchjdk() {case $1 in8)export JAVA_HOME=$JAVA_HOME_8;;21)export JAVA_HOME=$JAVA_HOME_21;;*)echo "Usage: switchjdk 8|21";;esacexport PATH=$JAVA_HOME/bin:$PATH
}# 初始默认 JDK 版本
switchjdk 21
保存文件后,执行以下命令使配置生效:
source ~/.bashrc
3. 切换 JDK 版本
在终端中使用 switchjdk 函数切换 JDK 版本,例如要切换到 JDK 8,执行以下命令:
switchjdk 8
然后输入以下命令验证切换结果:
java -version
macOS 系统
1. 安装多个 JDK 版本
通过 .dmg 安装包或 Homebrew 等工具在系统中安装多个不同版本的 JDK。
2. 配置环境变量
编辑 ~/.bash_profile 或 ~/.zshrc 文件,添加切换 JDK 版本的函数。
# 定义切换 JDK 版本的函数
switchjdk() {export JAVA_HOME=$(/usr/libexec/java_home -v $1)export PATH=$JAVA_HOME/bin:$PATH
}# 初始默认 JDK 版本
switchjdk 21
保存文件后,执行以下命令使配置生效:
source ~/.zshrc
3. 切换 JDK 版本
在终端中使用 switchjdk 函数切换 JDK 版本,例如要切换到 JDK 8,执行以下命令:
switchjdk 1.8
接着输入以下命令验证切换结果:
java -version相关文章:
jdk21下载、安装(Windows、Linux、macOS)
Windows 系统 1. 下载安装 访问 Oracle 官方 JDK 下载页面 或 OpenJDK 下载页面,根据自己的系统选择合适的 Windows 版本进行下载(通常选择 .msi 安装包)。 2. 配置环境变量 右键点击 “此电脑”,选择 “属性”。 在左侧导航栏…...
Baklib知识中台引领服务智能化
智能中枢系统架构解析 Baklib 知识中台的智能中枢系统采用分层解耦设计,通过数据接入层、知识处理层与服务输出层的三级架构实现全链路智能化管理。在数据接入层,系统支持多源异构数据的实时采集与标准化清洗,涵盖结构化数据(如客…...
Spring源码分析の循环依赖
文章目录 前言一、循环依赖问题二、循环依赖的解决三、整体流程分析 前言 常见的可能存在循环依赖的情况如下: 两个bean中互相持有对方作为自己的属性。 类似于: 两个bean中互相持有对方作为自己的属性,且在构造时就需要传入:…...
检查SSH安全配置-关于“MaxStartups参数”
官方文档介绍 在《检查SSH安全配置-sshd服务端未认证连接最大并发量配置》中我们简略地阐述了“MaxStartups参数”在SSH安全配置中的意义。但是,并未对该参数做详细说明。 为啥没有详细说明呢?因为俺也没弄明白! 我们先看一下sshd_config的…...
某查”平台请求头反爬技术解析与应对
一、请求头反爬技术概述 请求头(HTTP Header)是 HTTP 协议中用于在客户端和服务器之间传递信息的一部分。它包含了请求的来源、用户代理、内容类型等关键信息。许多网站通过检查请求头中的特定字段来判断请求是否来自合法的浏览器,从而防止爬…...
MOE结构解读和deepseek的MoE结构
不管dense还是MoE(Mixture of Experts)都是基于transformer的。 下面回顾下解码器块的主要架构: 注意力机制-层归一化&残差连接-FFN前馈神经网络-层归一化&残差连接。 dense模型是沿用了这个一架构,将post-norm换为pre-no…...
LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践
文章目录 引言理解 Flows(工作流)与 Crews(协作组)一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库(crewai、litellm) 二、本地DeepSeek R1大模型部署2.1 Ollama框架安…...
基于C++“简单且有效”的“数据库连接池”
前言 数据库连接池在开发中应该是很常用的一个组件,他可以很好的节省连接数据库的时间开销;本文基使用C实现了一个简单的数据库连接池,代码量只有400行只有,但是压力测试效果很好;欢迎收藏 关注,本人将会…...
为什么要将PDF转换为CSV?CSV是Excel吗?
在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…...
Redis 集群的三种模式:一主一从、一主多从和多主多从
本文记述了博主在学习 Redis 在大型项目下的使用方式,包括如何设置Redis主从节点,应对突发状况如何处理。在了解了Redis的集群搭建和相关的主从复制以及哨兵模式的知识以后,进而想要了解 Redis 集群如何使用,如何正确使用…...
面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?
面试题——简述Vue3的服务器端渲染(SSR)是如何工作的? 服务器端渲染(SSR)已经成为了一个热门话题。Vue 3,作为一款流行的前端框架,也提供了强大的SSR支持。那么,Vue 3的SSR究竟是如…...
2.25DFS和BFS刷题
洛谷P1101单词方阵:用sta存字符串,for找到‘y的位置,然后dfs对字符串用for进行一个一个的判断,不符合就return,下面再用for进行book标记,能执行下面的for说明上面没有return,所以说明找到&#…...
C语言基本知识------指针(4)
1. 回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。 void qsort(void base,//指针…...
【OMCI实践】ONT上线过程的omci消息(六)
引言 在前四篇文章中,主要介绍了ONT上线过程的OMCI交互的第一、二、三个阶段omci消息,本篇介绍第四个阶段,OLT下发配置到ONT。前三个阶段,每个厂商OLT和ONT都遵循相同标准,OMCI的交换过程大同小异。但第四个阶段&…...
C语言(13)------------>do-while循环
1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…...
腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票
腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…...
HybridCLR+Adressable+Springboot热更
本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易,动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目: 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…...
电脑连接示波器显示波形
通过网线连接示波器和电脑,将示波器波形显示在电脑上直接复制图片至报告中,以下是配置步骤。 一、设备 网线,Tektronix示波器,电脑 二、使用步骤 1.用网线连接电脑和示波器 2.电脑关掉WiFi,查看IPv4网关地址…...
监听其他音频播放时暂停正在播放的音频
要实现当有其他音频播放时暂停当前音频,你可以使用全局事件总线或 Vuex 来管理音频播放状态。这里我将展示如何使用一个简单的事件总线来实现这个功能。 首先,你需要创建一个事件总线。你可以在项目的一个公共文件中创建它,例如 eventBus.js…...
小熊猫C++安装EasyX最新教程
1.下载EasyX 官网下载: EasyX 官网https://easyx.cn/ 2.将下载文件改格式解压 注意:下载文件为.exe格式,需将其格式改成.zip格式! 如何改格式? a.若文件名字未显示.exe (1).打开此电脑 (2).点击上端的查看 (…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
