如何修復「無法建立 Java 虛擬機器」錯誤
1. 概述
Java 程式在 JVM(Java 虛擬機器)上運行,使得它們幾乎可以在任何地方運行,從應用程式伺服器到行動電話。如果Java安裝正確,我們就可以毫無問題地執行應用程式。然而,有時我們仍然會遇到「 Could not create the Java Virtual Machine
」之類的錯誤。
在本教程中,我們將討論「 Could not create the Java Virtual Machine
」錯誤。首先,我們將了解如何重現它。接下來,我們將了解錯誤的主要原因,稍後我們將了解如何修復它。
2. 理解錯誤
當 Java 無法建立虛擬機器 (JVM) 來執行程式或應用程式時,就會出現「 Could Not Create the Java Virtual Machine
」錯誤。
這是一條非常通用的錯誤訊息。 JVM 在建立時失敗,但實際原因可能是其他原因,且錯誤訊息未指定無法建立它的原因。
我們如何看待此錯誤取決於正在運行的生成該錯誤的基於 Java 的應用程式。 Java 應用程式(例如 Eclipse、IntelliJ 等)可能僅顯示主要錯誤訊息。
然而,從終端運行會產生一條主要訊息和更多資訊:
- VM初始化期間發生錯誤
- 無法為物件堆保留足夠的空間
- 無法辨識的選項:<選項>等。
讓我們重現該錯誤。首先,讓我們建立一個簡單的HelloWorld
類別:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello");
}
}
對於我們的範例,讓我們使用 Java 8 並使用選項-XX:MaxPermSize=3072m.
執行HelloWorld
。這樣就可以成功運行了。
但是,在 Java 17 中-XX:MaxPermSize
選項已被刪除並成為無效選項。因此,當我們使用此選項在 Java 17 中運行相同的類別時,它會失敗並顯示「 Error: Could not create the Java Virtual Machine
」。
除了主要錯誤之外,系統還會傳回特定的錯誤訊息“Unrecognized VM option 'MaxPermSize=3072m”
:
$ java -XX:MaxPermSize=3072m /HelloWorld.java
Unrecognized VM option 'MaxPermSize=3072m'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
要解決此問題,我們需要刪除無效選項並將其替換為有效的替代選項(如果存在)。
3. 可能原因
如果我們看到錯誤“ Could not create the Java Virtual Machine
”,這表示我們的 Java 安裝無法啟動執行應用程式的 JVM。
該錯誤可能因多種因素而發生。不正確的 Java 安裝可能會導致此錯誤。有多種可能性。例如,如果安裝的 Java 版本與嘗試執行的應用程式或程式不相容,則 JVM 可能無法建立。另外,如果安裝目錄沒有加入到系統的PATH
環境變數中,Java可能無法被識別,導致此錯誤。
此外,安裝多個 Java 版本可能會導致問題,從而導致此錯誤。最後,如果 Java 更新停止或損壞,可能會導致安裝不正確。
在某些情況下, JVM可能沒有足夠的記憶體來運行程式。預設情況下,Java 使用初始堆大小和最大堆大小。因此,如果我們的應用程式超過最大堆大小,就會發生錯誤。我們可以透過調整 Java 可以使用的系統記憶體量來調整這一點。
損壞的 Java 檔案或無效的 JVM 設定也可能阻止 JVM 啟動,正如我們在範例中看到的那樣。
其他軟體或應用程式可能與 Java 發生衝突,這會阻止 JVM 啟動並出現此錯誤。
另一個原因可能是我們的系統缺乏合適的管理員存取權限。
4. 可能的解決方案
沒有一個解決方案可以適用於所有情況。根據具體情況,我們可能會考慮不同的故障排除方法。但是,讓我們看看需要驗證的一些基本要點。
4.1.驗證 Java 安裝
首先,我們必須透過在命令提示字元下執行java -version
來確保 Java 已正確安裝:
% java -version
java 17.0.12 2024-07-16 LTS
Java(TM) SE Runtime Environment (build 17.0.12+8-LTS-286)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286, mixed mode, sharing)
另外,我們應該確保Java的安裝目錄在系統的PATH
環境變數中列出。
4.2.檢查記憶體選項
我們的下一步是查看應用程式記憶體調整參數。在 Java 8 之前,我們的 PermGen 記憶體空間具有許多標誌,例如-XX:PermSize, XX:MaxPermSize,
用於調整應用程式記憶體。
從 Java 8 開始,Metaspace 記憶體空間取代了舊的 PermGen 記憶體空間。許多新的元空間標誌可用,包括-XX:MetaspaceSize
、 -XX:MinMetaspaceFreeRatio
和-XX:MaxMetaspaceFreeRatio
。
這些標誌可用於改進應用程式記憶體調整。由於這項改進,JVM 出現OutOfMemory
錯誤的可能性降低了。
4.3.檢查權限
另外,如果存取/權限有任何問題,有時我們會收到錯誤:
-
java.io.FileNotFoundException: /path/to/file (Permission denied)
-
java.security.AccessControlException: access denied (“java.io.FilePermission” “/path/to/file” “read”)
-
java.lang.SecurityException: Unable to create temporary file. Etc.
為了解決這些問題,我們需要以管理員身分執行Java或修改檔案/目錄權限。使用Windows時,我們右鍵單擊終端或IDE圖標,然後選擇“ Run as administrator
”。對於 Linux 和 Mac,我們使用sudo -i
或su
以 root 使用者身分開啟終端機。
4.4.清理
有時系統中的其他Java應用程式可能會與我們的衝突。我們可以嘗試識別它們,然後停用或卸載我們最近安裝的任何與 Java 相關的軟體。
最後,如果一切都失敗了,我們可以嘗試從頭開始重新安裝 Java。
5. 結論
在本文中,我們研究了 Java 的「 Could not create the Java Virtual Machine
」錯誤。我們討論瞭如何重現錯誤並找出異常原因。最後,我們研究了一些解決方案來解決該錯誤。
「 Could not create the Java Virtual Machine
」錯誤可以透過識別和解決根本原因來解決。透過遵循故障排除步驟,我們應該能夠修復大多數情況下的錯誤並使我們的 Java 程式順利運行。