如何修復「無法建立 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 程式順利運行。