macOS Sonoma 14.4にアップデートするとJavaがクラッシュするとオラクルが注意喚起。Appleシリコン搭載Macで
オラクルは、Appleシリコン搭載のMacでmacOS Sonoma 14.4にアップデートを行うと、Java 8以降のすべてのバージョンでJavaが予期せず終了する現象が発生するとして、Macユーザーに注意喚起を行っています。
今のところ回避策はなく、macOSをバージョンアップしてしまうと元に戻す簡単な方法もないため、Appleシリコン搭載のマシンでJavaを利用している開発者やユーザーは、この問題が解決するまでは最新のmacOSへの移行を延期することをオラクルは勧めています。
Javaが正常に動作しないことで、Javaに依存しているツールもmacOS Sonoma 14.4では動作しなくなります。Kotlinの開発元などで知られるJetBrainsは、JetBrains IDEが動作しなくなることについて注意喚起しています。
macOS 14.4でJavaが予期せず終了する原因
オラクルによると、この問題はmacOS 14.4のアーリーアクセス版では発生していなかったとのことです。
macOS Sonoma 14.4でJavaが予期せず終了する原因についてオラクルは、JavaのJITコンパイルと実行のサイクルのなかでOSの保護メモリ領域にアクセスすると、以前のmacOSとは異なりSIGKILLシグナルがプロセスに送られるようになったためだと説明しています。
少し長いのですが、説明部分を引用します。
As a normal part of the just-in-time compile and execute cycle, processes running on macOS may access memory in protected memory regions. Prior to the macOS 14.4 update, in certain circumstances, the macOS kernel would respond to these protected memory accesses by sending a signal, SIGBUS or SIGSEGV, to the process. The process could then choose to handle the signal and continue execution. With macOS 14.4, when a thread is operating in the write mode, if a memory access to a protected memory region is attempted, macOS will send the signal SIGKILL instead. That signal cannot be handled by the process and the process is unconditionally terminated.
JITコンパイルおよび実行サイクルの通常の一部として、macOS上で実行されるプロセスは保護されたメモリ領域内のメモリにアクセスすることがあります。macOS 14.4アップデート以前は、特定の状況において、macOSカーネルはこれらの保護されたメモリに対するアクセスにはSIGBUSまたはSIGSEGVというシグナルをプロセスに送信することで応答していました。プロセスは送られたシグナルを処理して実行を続行できました。
macOS 14.4では、スレッドが書き込みモードで動作している場合、保護されたメモリ領域へのメモリアクセスが試みられると、macOSはSIGKILLを送信するようになりました。このシグナルはプロセスでは処理することはできず、プロセスは無条件に終了するのです。
この現象は「bugID JDK-8327860 : Java processes get killed, leaving no hs_err/stack trace on macOS 14.4」として登録され、以後管理されることになります。
2024年3月27日追記
Appleから本件の修正を含むアップデートが行われました。
あわせて読みたい
シスコ、Splunkの買収を完了。「Splunkとともに世界最大級のソフトウェア企業に」とソフトウェア企業への変身を宣言
≪前の記事
Microsoft Azureも他社クラウドなどへの移行時のデータ転送料を無料にすると発表。Google Cloud、AWSに続き