跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何在Windows服务器上部署Java环境_生产环境JDK配置规范

生产环境应选用OpenJDK 21 LTS(支持至2026年),从Adoptium或BellSoft官网下载msi安装包,架构与系统一致,安装路径无空格中文,正确配置系统级JAVA_HOME和Path,并确保运行JDK版本不低于编译版本,启用G1GC及固定堆内存与GC日志。 怎么选JDK版本和安装包 生产环境别碰Oracle JDK 8免费版,它早就不更新了,连安全补丁都停了。OpenJDK是唯一靠谱选择,推荐使用LTS版本:
jdk-17
或
jdk-21
,优先选
jdk-21
(2023年9月发布,LTS支持到2026年)。下载必须认准官方渠道:
https://www.php.cn/link/e387385ebe0dbeefed3e8e9f3968aaba
(Eclipse Temurin)或
https://www.php.cn/link/33c54daf901630e4e088b9986156a597
(Liberica),别用第三方打包的“精简版”——它们常删掉
jmods
、
javac
甚至
jstack
,出问题时连线程堆栈都抓不到。 安装包选
msi
格式,不是
zip
:自动注册系统变量、关联文件类型、写入Windows事件日志,运维排查有依据 架构必须和服务器一致:x64服务器上装
jdk-21_x64.msi
,别混用ARM64或32位包,否则
java -version
能跑,但Spring Boot启动直接报
UnsatisfiedLinkError
安装路径避免空格和中文:
C:\Java\jdk-21.0.2
可以,
C:\Program Files\Java...
不行——某些老脚本会把空格当参数分隔符,导致
JAVA_HOME
解析失败 JAVA_HOME 和 Path 怎么设才不翻车 Windows服务、IIS反向代理、甚至Tomcat Windows Service Installer,全依赖
JAVA_HOME
环境变量。只设
Path
不设
JAVA_HOME
,多数中间件启动就失败。
JAVA_HOME
必须指向JDK根目录,不是
bin
子目录:
C:\Java\jdk-21.0.2
✔️,
C:\Java\jdk-21.0.2\bin
❌
Path
里只加
%JAVA_HOME%\bin
,别重复写死绝对路径,否则升级JDK后要改两处 所有变量用 系统级环境变量 ,不是当前用户级——Windows服务默认以
LocalSystem
或专用账户运行,读不到用户变量 设完重启命令行窗口,用
echo %JAVA_HOME%
和
where java
双重验证:前者输出路径,后者返回
%JAVA_HOME%\bin\java.exe
才对 为什么 Tomcat / Spring Boot 启动报 “Unsupported class file major version” 这错误90%是JDK编译版本和运行版本不匹配。比如用
jdk-21
编译的WAR包,扔进只装了
jdk-11
的服务器,必然崩。 查看应用编译目标版本:
javap -v YourApplication.class | findstr "major"
,结果是65 → 对应JDK 21,61 → JDK 17 运行环境JDK版本 ≥ 编译版本,但 不能低 :JDK 17运行JDK 21编译的字节码?不行。反过来可以(JDK 21运行JDK 17编译的包),但不建议——可能触发
IllegalAccessError
(模块访问规则变严) Maven项目检查
pom.xml
里的
maven-compiler-plugin
:
21
和
21
必须和服务器JDK一致 Spring Boot应用还要看
spring-boot-starter-parent
版本兼容性:2.7.x最高只支持JDK 17,3.2.x才正式支持JDK 21 GC 日志和内存参数怎么配才稳 生产环境不配GC参数=裸奔。默认
UseParallelGC
在多核服务器上容易抢CPU,而
G1GC
没调优又常因大对象触发Full GC。 Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; 强制指定GC算法:
-XX:+UseG1GC
(JDK 9+默认,但显式写上更明确) 内存参数必须成对出现:
-Xms4g -Xmx4g
,禁止
-Xms2g -Xmx8g
——Windows下JVM申请虚拟内存后不释放,堆扩缩反而引发卡顿 开启GC日志(JDK 11+):
-Xlog:gc*:file=C:/logs/gc.log:time,tags,level
,路径必须提前建好
C:\logs
目录并赋权给运行账户 禁用
-XX:+UseStringDeduplication
(除非确认应用大量重复字符串)——它增加GC停顿时间,且只对G1有效,ZGC/Shenandoah不支持 JDK配置最麻烦的不是装不上,而是装上了但被另一套旧环境变量覆盖,或者服务账户根本读不到
JAVA_HOME
。上线前一定用服务账户手动执行一次
java -version
,别只在管理员CMD里测。

相关文章