Mac OS X 環境で NetBeans 7.4 + JDK7u45 が頻繁にハングする
タイトルの通り、以下の環境にて NetBeans がハングし頻繁に操作不能に陥っていました。
調べたところどうやら以下の Mac OS X 向けの Java の Bug に該当するようです。
JDK-8025588 : macosx Frozen AppKit thread in 7u40
事象の確認方法としては jstat コマンドなどでハングしたときの Netbeans のスレッドダンプを確認すると以下の様なダンプが見られるとのことです。
$ /usr/bin/jstack -F 69760 ... Thread 1287: (state = IN_NATIVE) - sun.lwawt.macosx.LWCToolkit.doAWTRunLoop(long, boolean) @bci=0 (Interpreted frame) - sun.lwawt.macosx.LWCToolkit.invokeAndWait(java.lang.Runnable, java.awt.Component) @bci=67, line=549 (Interpreted frame) - sun.lwawt.macosx.LWCToolkit.invokeAndWait(java.util.concurrent.Callable, java.awt.Component) @bci=11, line=489 (Interpreted frame) - sun.lwawt.macosx.CAccessibility.invokeAndWait(java.util.concurrent.Callable, java.awt.Component) @bci=2, line=75 (Interpreted frame) - sun.lwawt.macosx.CAccessibility.getFocusOwner(java.awt.Component) @bci=8, line=521 (Interpreted frame) ...
(* 69760 は NetBeans のPIDです.)
この Bug レポートによると現時点 (JDK7u45) では以下の回避策があるようです。
- JDK7u25 を使う
- JDK8 Early Access を使う
以下、念のためそれぞれの実施方法です。
回避策1: JDK7u25 を使う
現在JDK7u45(もしくはu40)を使っているという前提です。
JDK7u45をアンインストール
/Library/Java/JavaVirtualMachines ディレクトリに移動し JDK7u45(もしくはu40)を削除
$ cd /Library/Java/JavaVirtualMachines $ rm -rf jdk1.7.0_45.jdk
JDK7u25のダウンロード
回避策2: JDK8 Early Access を使う
追記
JDK7u25を使う対策についてですが、MacBook Pro の Retina ディスプレイを使っている場合、JDK7u25ではRetinaに対応していないので表示がぼんやりとしてと悲しい状態になります。
JDK7u45の場合
JDK7u25の場合