甲骨文(Oracle)在Java官方部落格提醒開發者,macOS 14.4引入了一個可能導致Java程序意外終止的臭蟲,Java 8到JDK 22早期存取版本全部受影響,目前沒有解決方法,官方建議Java開發者推延更新macOS 14.4直到問題解決為止。

問題是發生在M1、M2 和 M3的Apple silicon晶片,在macOS上的一項功能,該功能控制每個執行緒寫入和執行動態生成程式碼的方法與時機。在macOS上,正常JIT和執行周期間,執行中的程序可能會存取受保護的記憶體區域,而macOS 14.4更新之前,在部分情況,macOS核心會透過向程序發送SIGBUS或SIGSEGV訊號,以回應受保護的記憶體存取。

但在macOS 14.4中,當執行緒在寫入模式下進行時,當程序嘗試存取受保護記憶體區域,macOS會發送SIGKILL訊號,而程序會在無法處理SIGKILL訊號的狀況下被強制終止。由於Java虛擬機器會動態生成程式碼,需要利用受保護記憶體存取的訊號機制,來維持正確性與效能,但macOS 14.4卻會將嘗試執行此操作的程序直接終止,使得程序沒有機會處理訊號。

甲骨文提到,雖然使用GraalVM原生映像檔建立的AoT編譯應用程式應該不會受影響,但是開發者卻無法創建新的映像檔。官方也表示,該問題在macOS 14.4早期存取版本並不存在,直到Apple發布了更新之後,這個問題才被發現。

由於macOS更新之後難以回退,除非開發者在作業系統更新之前,就對系統進行了完整的備份。目前甲骨文已通知其客戶、Apple以及OpenJDK合作夥伴,同時建議在Apple silicon裝置上執行macOS 14的開發者,暫時不要往上更新到macOS 14.4,等到問題解決再升級。

熱門新聞

Advertisement