版本
- 適用於 JDK 23 的 GraalVM (最新)
- 適用於 JDK 24 的 GraalVM (搶先體驗)
- 適用於 JDK 21 的 GraalVM
- 適用於 JDK 17 的 GraalVM
- 封存
- 開發版本
最佳化與效能
Native Image 提供不同的機制,讓使用者可以針對效能、檔案大小、建置時間、除錯能力和其他指標來最佳化產生的二進位檔。
最佳化等級 #
與 gcc
和 clang
類似,使用者可以使用 -O
選項來控制最佳化等級。預設會使用 -O2
,目的是在效能、檔案大小和建置時間之間取得良好的平衡。下表提供不同最佳化等級的概觀,並說明它們在何時有用
等級 | 最佳化 | 使用案例 |
---|---|---|
-Ob |
減少 | 快速建置模式:在開發期間藉由避免耗時的最佳化來加快建置速度。有時也能減少檔案大小。 |
-Os |
減少 | 針對大小最佳化:-Os 啟用所有 -O2 的最佳化,但會排除那些可能會顯著增加程式碼或映像檔大小的最佳化。通常會產生最小的映像檔,但效能會降低。 |
-O0 |
無 | 通常會與 -g 一起使用,以改善除錯體驗。 |
-O1 |
基本 | 以效能換取較小的檔案大小和建置時間。Oracle GraalVM 的 -O1 在某種程度上可與 GraalVM 社群版的 -O2 相媲美。 |
-O2 |
進階 | 預設值: 目的是在合理的檔案大小下達到良好的效能。 |
-O3 |
全部 | 目的是在建置時間較長的情況下達到最佳效能。由 Oracle GraalVM 自動用於 PGO 建置(--pgo 選項)。在 GraalVM 社群版中,-O3 與 -O2 相同。 |
設定檔導向最佳化以改善輸送量 #
請考慮使用設定檔導向最佳化來最佳化應用程式,以改善輸送量。這些最佳化讓 Graal 編譯器能夠利用效能分析資訊,類似於在將應用程式 AOT 編譯時,作為 JIT 編譯器執行。為此,請執行下列步驟
- 使用
--pgo-instrument
建置應用程式。 - 使用具代表性的工作負載執行經過檢測的應用程式,以產生效能分析資訊。從這次執行收集的設定檔預設會儲存在 default.iprof 檔案中。
- 使用
--pgo
選項重建應用程式。您可以使用--pgo=<your>.iprof
傳遞自訂的 .iprof 檔案,否則會使用 default.iprof。這會重建映像檔並產生應用程式的最佳化版本。
如需此主題的詳細資訊,請參閱 設定檔導向最佳化的基本用法。
針對特定機器進行最佳化 #
Native Image 提供 -march
選項,其運作方式與 gcc
和 clang
中的選項類似:它讓使用者可以控制 Graal 編譯器在將程式碼編譯為原生程式碼時可以使用的指令集。預設情況下,Native Image 在 x64 上使用 x86-64-v3
,在 AArch64 上使用 armv8-a
。使用 -march=list
列出所有可用的機器類型。如果產生的二進位檔是在與部署二進位檔相同或相似的機器類型上建置的,請使用 -march=native
。此選項會指示編譯器使用在產生二進位檔的機器上找到的所有可用指令。另一方面,如果產生的二進位檔是散發給許多不同且可能非常舊的機器的使用者,請使用 -march=compatibility
。這會將編譯器使用的指令集縮減到最低限度,從而提高產生之二進位檔的相容性。
其他功能 #
Native Image 提供其他功能來進一步最佳化產生的二進位檔
- 選擇適當的垃圾收集器並調整垃圾收集原則可以減少 GC 時間。請參閱 記憶體管理。
- 在映像檔建置期間載入應用程式組態可以加速應用程式啟動。請參閱 在映像檔建置時的類別初始化。
- 建置輸出可能會提供其他一些建議,協助您充分利用 Native Image。請參閱 建置輸出:建議。