首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Windows 下 java.exe、javaw.exe、javaws.exe、jvm.dll 差異詳解

     編輯:Java 相關知識

四大組件對比

組件類型控制台適用場景進程名
java.exeWin32 控制台應用**有** (綁定當前 cmd)命令行運行、輸出日志、調試java.exe
javaw.exeWin32 GUI 應用**無** (不彈出控制台)Swing/JavaFX 桌面程序、雙擊 jar 運行javaw.exe
javaws.exeJava 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。

常見問題

總結

java.exe = 控制台、調試、服務 (配合重定向);javaw.exe = 桌面 GUI、無感後台;javaws.exe = 歷史遺留;jvm.dll = 核心引擎。選對啟動器,是 Windows 上 Java 部署的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象原因/解決
雙擊 jar 無反應關聯損壞,修復 javaw.exe -jar "%1" %* 或重裝 JDK
GUI 程序用 java.exe 運行,關閉 cmd 程序退出改用 javaw.exe 或 start javaw -jar app.jar
服務部署看不到日志javaw.exe 無控制台,配置 logging.file 或重定向標準流