FreeBSD 9.0-RELEASE i386 で実行されている Java の下で実行されている Java サブプロセスのパフォーマンスに問題があります。
このプログラムの System.exit() は、実行に約 2.6 秒かかります。そして、私はその理由を理解できません。Windows では 0.025 秒かかります。更新: OpenJDK 6 での実行速度も大幅に向上しています。
ktrace の下で OpenJDK7 を実行すると、シャットダウン中に次の巨大なシーケンスが表示されます。
26795 Java 1.808597 CALL _umtx_op(0x2831e068,0xf,0,0,0xbf7a9870)
26795 Java 1.838640 RET _umtx_op -1 errno 60 操作がタイムアウトしました
ここでプログラムが何をしようとしているのか、どうすればわかりますか? または、これを修正する簡単な回避策または方法はありますか? この問題は、Web 検索で判断すると、FreeBSD の OS レベルでかなり頻繁に発生するようですが、私はまだ見つけたものを分析しています (そして libthr などを学ぼうとしています)。
タイムスタンプを出力する以外に、私が追加したシャットダウン フックはなく、システムによって追加されたシャットダウン フックも、削除するファイルも、runFinalizersOnExit もありません。システムはネイティブ メソッド java.lang.Shutdown.halt0 で時間を費やしているようです。これはまだ分析中です。