Java users on macOS 14 running on Apple silicon systems should skip macOS 14.4 and update directly to macOS 14.4.1

原文はこちら。
The original article was written by Aurelio Garcia-Ribeyro (Senior Director of Product Management, Oracle).
https://blogs.oracle.com/java/post/java-on-macos-14-4


【2024/03/26】Sonoma 14.4.1がリリースされ、リリースノートにも対応した旨の表記が入りました。JBS (Java Bug System) のステータスもResolvedに変わっています。

macOS Sonoma 14.4.1 – What’s new in the updates for macOS Sonoma https://support.apple.com/en-us/109035
[JDK-8327860] Java processes get killed, leaving no hs_err/stack trace on macOS 14.4
https://bugs.openjdk.org/browse/JDK-8327860

2024/3/25に、AppleはmacOS Sonoma 14.4.1をリリースし、Appleのサポートサイトでこの記事で記載した問題に対処済みと示しました。OracleもmacOS 14.4.1を適用した後、問題が再現しないことを確認しました。それを踏まえて、この記事を更新しました。

macOS 14.4に入ったJavaプロセスが予期せず終了する問題は、Java 8からJDK 22の早期アクセスビルドまでのすべてのJavaバージョンに影響を及ぼしています。回避策はなく、macOSのアップデートを元に戻す簡単な方法もないため、影響を受けたユーザーは、OSアップデート前にシステムの完全なバックアップを取っていない限り、安定した構成に戻せない可能性があります。

この問題はmacOS 14.4の早期アクセスリリースには存在しなかったため、Appleがアップデートをリリースした後に発見されました。

Apple製シリコンプロセッサ(M1、M2、M3)上のmacOSには、動的に生成されるコードをスレッドごとに生成(書き込み)または実行する方法とタイミングを制御する機能が含まれています。

通常のJITコンパイルおよび実行サイクルの動作において、macOS上で実行されるプロセスが保護領域内のメモリにアクセスする可能性があります。macOS 14.4 アップデート以前は、特定の状況において、macOSカーネルは、SIGBUSまたはSIGSEGVというシグナルをプロセスに送信することで、これらの保護領域のメモリアクセスに応答していました。その後、プロセスはシグナルを処理して実行を続行できます。 macOS 14.4では、スレッドが書き込みモードで動作している場合、保護領域のメモリアクセスが試みられると、macOSは代わりにシグナルSIGKILLを送信します。このシグナルはプロセスでは処理できず、プロセスは無条件に終了します。

Java仮想マシンは動的にコードを生成し、保護領域のメモリアクセスのシグナルのメカニズムを、正当性(例えば、メモリマップドファイルの切り捨てを処理するため、など)とパフォーマンスの両方のために活用しますが、macOS 14.4では、これを試みるプログラムはシグナルを処理する機会を得られず、終了してしまいます。

GraalVM Native Imageで作成されたAhead-of-Timeコンパイルされたアプリケーションは影響を受けませんが、新しいイメージを構築する機能は影響を受ける可能性があります。

Oracleは、この状況を顧客、Apple、および OpenJDK のパートナーに通知しました。macOS 14を実行しているARM ベースのApple デバイスでJavaを使用しているユーザーは、macOS 14.4をスキップし、直接14.4.1にアップデートされることをこの問題が解決されるまでアップデートの適用を延期することをお勧めします。

この問題は bugs.java.comのbugID JDK-8327860で追跡できます。

JDK-8327860 : Java processes get killed, leaving no hs_err/stack trace on macOS 14.4
https://bugs.java.com/bugdatabase/view_bug?bug_id=8327860
[JDK-8327860] Java processes get killed, leaving no hs_err/stack trace on macOS 14.4
https://bugs.openjdk.org/browse/JDK-8327860

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください