You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下使用--add-options时jlink创建的运行时挂起问题

问题复现

使用JDK 11.0.15自带jlink执行如下命令构建自定义运行时:

C:\oracle\jdk-11.0.15\bin\jlink --add-modules ALL-MODULE-PATH --output jre --strip-debug --no-man-pages --no-header-files --compress=2 --module-path "C:\oracle\jdk-11.0.15\jmods" --output compressedrt --add-options="-Xmx64m"

构建完成后执行验证命令:

compressedrt\bin\java.exe -version 

进程会直接挂起无任何响应。

  • 该问题仅在配置--add-options参数时触发,移除该参数后构建的运行时可正常使用
  • 换用JDK 17.0.3.1执行参数完全一致的jlink命令,构建出的运行时无该问题,可正常执行:
C:\oracle\jdk-17.0.3.1\bin\jlink --add-modules ALL-MODULE-PATH --output jre --strip-debug --no-man-pages --no-header-files --compress=2 --module-path "C:\oracle\jdk-17.0.3.1\jmods" --output compressedrt --add-options="-Xmx64m"
根因说明

这是JDK 11早期更新版本中jlink工具的实现Bug:当--add-options的参数值用双引号包裹时,引号会被错误写入生成的运行时启动配置中,导致JVM启动时读取到非法格式的启动参数,进入死锁挂起状态,不会抛出任何可见报错。该缺陷在JDK 12及之后的大版本中完成修复,最初没有向后移植到JDK 11的早期补丁中,因此在JDK 11.0.15版本上可以稳定复现。

解决方法

二选一即可:

  1. 保留当前JDK 11.0.15版本的前提下,去掉--add-options参数值的外层双引号,把参数写为--add-options=-Xmx64m即可。如果需要配置多个JVM参数,直接在等号后用空格分隔多个参数即可,不需要额外加引号,例如--add-options=-Xmx64m -Xms32m,构建出的运行时参数可正常生效,不会出现挂起问题。
  2. 将使用的JDK 11升级到11.0.16及之后的更新补丁版本,该问题已经在后续JDK 11的官方补丁中修复,不需要调整命令参数写法;也可以直接使用JDK 17及以上版本构建自定义运行时。

内容的提问来源于stack exchange,提问作者Sergey Rymsha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:09:20