Java 本機介面 (JNI) 允許 Java 程式呼叫以 C 或 C 等語言編寫的本機方法。從歷史上看,本機方法有三個主要用途:
但是,隨著 Java 平台的成熟,使用本機方法存取特定於平台的功能的需求已經減少。其中許多功能現在可以在 Java 平台中直接存取,例如 Java 9 中新增的 Processes API,它提供對作業系統進程的存取。當沒有 Java 等效項時,使用本機方法存取本機程式庫仍然是可以接受的,但必須仔細考慮這種做法。
在提升效能方面,很少建議使用本機方法。在 Java 的早期版本中,這是必要的,但 JVM 已經發展並變得更快。如今,大多數任務都可以在純 Java 中以類似的效能執行。一個例子是 BigInteger 類別的重新實作。最初,BigInteger 依賴用 C 編寫的多精度算術函式庫,但隨著 JVM 的發展,用 Java 實作的版本變得與原生版本一樣有效率。
但是,在某些情況下,極端性能仍然可以證明使用本機方法是合理的。一個例子是對於需要高精度算術的程式設計師來說,使用 GMP 庫(GNU 多精度算術庫),其中本機方法可能是最佳選擇。
了解使用本機方法的後果非常重要。由於本機語言沒有與 Java 相同的安全保證,因此會引入記憶體損壞等風險。此外,使用本機方法會降低程式碼的可移植性,使其更加依賴特定平台。調試本機程式碼的過程也更加複雜,如果做得不好,由於 Java 和本機程式碼之間的轉換成本,最終可能會降低程式的效能。
另一個關鍵點是本機方法需要使用“粘合程式碼”,這通常難以閱讀且編寫起來很乏味。這增加了開發的額外複雜性,從而增加了難以識別和修復的錯誤的可能性。
總之,在使用原生方法之前要仔細考慮。在大多數情況下,您不需要使用它們來提高效能。如果需要存取低階資源或本機庫,請將本機方法的使用限制在最低限度,保持本機程式碼較小,並對其進行徹底測試,以避免可能危及整個應用程式的嚴重問題。
以上是項目 明智地使用本機方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!