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) では以下の回避策があるようです。

  1. JDK7u25 を使う
  2. JDK8 Early Access を使う

以下、念のためそれぞれの実施方法です。

回避策1: JDK7u25 を使う

現在JDK7u45(もしくはu40)を使っているという前提です。

JDK7u45をアンインストール

/Library/Java/JavaVirtualMachines ディレクトリに移動し JDK7u45(もしくはu40)を削除

$ cd /Library/Java/JavaVirtualMachines
$ rm -rf jdk1.7.0_45.jdk

参考: Uninstalling the JDK

JDK7u25のダウンロード

Java SE Development Kit 7u25

回避策2: JDK8 Early Access を使う

JDK8のEarly アクセスのダウンロード

JDK™ 8 Early Access Releases

私は JDK8 build b120 を使っていてこれまでのところ問題なく動いています。

追記

JDK7u25を使う対策についてですが、MacBook Pro の Retina ディスプレイを使っている場合、JDK7u25ではRetinaに対応していないので表示がぼんやりとしてと悲しい状態になります。

JDK7u45の場合

f:id:kaizawa2:20131222122749p:plain

JDK7u25の場合

f:id:kaizawa2:20131222122738p:plain