Java 虛擬機器 (JVM) 是 Java 生態系統的核心,提供執行 Java 程式碼的所有必要工具。要充分理解它的工作原理,了解該解釋器的生命週期及其對 Java 應用程式的效能和最佳化的影響至關重要。
整個 JVM 生命週期始於一個稱為「JVM Bootstrapping」的基本過程,該過程負責建構整個執行環境並準備它。正是在這個上下文中:解釋命令列上傳遞的參數,在記憶體中分配 JVM 程式碼,初始化 JVM 的內部資料結構,開始記憶體管理,最後主應用程式執行緒進行操作。讓我們分別探討本段所述的每個子流程:
解釋命令列上傳遞的參數
當程式透過命令列啟動時,JVM 啟動一系列進程,負責分析提供的參數,其中可能包括初始化參數- 例如:-Xms 和-Xmx 來定義最小大小和最大堆,負責在應用程式上下文中分配和創建物件的記憶體區域- 調試規範或配置,甚至是垃圾收集器週期本身的配置。
在繼續之前,有必要提一下:為了簡單起見,我們將分析處理高階 JVM 參數解析的程式碼段-那些以 -XX 開頭的參數。
為了更清楚,我們將使用 OpenJDK 的開源程式碼作為進一步的參考。在位於目錄 src/hotspot/share/runtime.arguments.cpp 的檔案 arguments.cpp 中,CLI 解釋進階參數 (-XX) 的函數如下:
簡單分析一下,函數開始檢查傳遞的參數是否以或-開頭,確定flag是否為布林值,以及是否應該停用或啟動。
之後,代碼開始提取標誌名稱。分析每個字符,如果不是字母數字或不是_,則結束(表示標誌名完整)。
完成檢查並識別標誌名稱後,最終呼叫方法 JVMFlag* flag = find_jvm_flag(name, name_len); 以查看是否有任何可用的配置。
這是如何解析 -XX 最高級參數的一個小總結。然而,在我將要提到的同一個檔案中,可以找到以 -X 開頭的參數進程,這些進程透過另一個解析函數:
標誌範例:-XMS
文章正在建造中
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3