四大組件對比
| 組件 | 類型 | 控制台 | 適用場景 | 進程名 |
java.exe | Win32 控制台應用 | **有** (綁定當前 cmd) | 命令行運行、輸出日志、調試 | java.exe |
javaw.exe | Win32 GUI 應用 | **無** (不彈出控制台) | Swing/JavaFX 桌面程序、雙擊 jar 運行 | javaw.exe |
javaws.exe | Java Web Start 啟動器 | 視配置 | JNLP 應用、瀏覽器啟動富客戶端 (已棄用) | javaws.exe |
jvm.dll | 核心動態庫 | 無 (被進程加載) | JVM 運行時核心,C/C++ 嵌入 JVM 時調用 | 宿主進程名 |
深度解析
1. java.exe vs javaw.exe
// 同一個 HelloWorldSwing GUI 程序
java -cp . HelloWorldSwing // 進程 java.exe,控制台佔用,關閉控制台程序退出
javaw -cp . HelloWorldSwing // 進程 javaw.exe,無控制台,後台靜默運行
// Eclipse/IDEA 運行屬於 javaw.exe 類型 (無控制台)
關鍵差異:java.exe 標準流 (stdin/stdout/stderr) 連接控制台;javaw.exe 標準流為空,System.out.println 內容丟失 (除非重定向到文件/管道)。
2. javaws.exe (Java Web Start)
- Java 8u201 後商業授權收費,Java 11 移除,JDK 13 完全廢棄。
- 替代方案:打包為原生安裝包 (jpackage)、Web 應用、Docker 容器。
- 進程名顯示為
javaws.exe,實際啟動的仍是 java.exe 子進程。
3. jvm.dll
- 位於
JRE/bin/server/jvm.dll (Server VM) 或 client/jvm.dll (Client VM)。
- 實現了 JNI 接口,C/C++ 程序可通過
JNI_CreateJavaVM 嵌入 JVM。
- 不直接運行,被
java.exe/javaw.exe/javaws.exe 或自定義宿主加載。
任務管理器識別技巧
- 命令行參數:啟用「命令行」列,可見完整啟動參數 (如
-Xmx512m -jar app.jar)。
- 用戶名:服務運行顯示
SYSTEM 或服務賬戶。
- 進程樹:
javaws.exe → java.exe;Tomcat bootstrap.jar → java.exe。
常見問題
| 現象 | 原因/解決 |
| 雙擊 jar 無反應 | 關聯損壞,修復 javaw.exe -jar "%1" %* 或重裝 JDK |
| GUI 程序用 java.exe 運行,關閉 cmd 程序退出 | 改用 javaw.exe 或 start javaw -jar app.jar |
| 服務部署看不到日志 | javaw.exe 無控制台,配置 logging.file 或重定向標準流 |
總結
java.exe = 控制台、調試、服務 (配合重定向);javaw.exe = 桌面 GUI、無感後台;javaws.exe = 歷史遺留;jvm.dll = 核心引擎。選對啟動器,是 Windows 上 Java 部署的基本功。
- 上一篇文章: Java 三元運算符 (?:) 完全指南:語法、嵌套、優先級與最佳實踐
- 下一篇文章: Java DOM/XPath 操作 XML 完整實戰:增刪改查與命名空間處理
Copyright ©
程式碼之家 All Rights Reserved