jdk6-u18 VM (solaris 上) で-XX:+DoEscapeAnalysis
オプションを有効にしてみましたが、かなり残念な結果でした。私はかなり多くのアクター (20,000 人) を持つ scala アプリケーションを実行しています。ガベージ作成のレシピです!
通常、アプリは 256Mb のヒープで実行できますが、大量のガベージが生成されます。定常状態では:
- GC に 10% の時間を費やす
- 30 秒未満で 150Mb を超えるガベージが生成され、その後 GC が実行されます
エスケープ分析が役立つかもしれないと思ったので、オプションを有効にしてアプリを再実行しました。アプリが収集したガベージをますます消去できなくなり、最終的に GC の実行にすべての時間を費やすようになり、アプリが完全な割り当てで「フラットライン」になることがわかりました。
OutOfMemoryError
この時点で、アプリは期待していた をスローしなかったと言わざるを得ません。おそらくJConsole
(分析を実行するために使用していた)このオプションをオンにすると、GC統計が正しく表示されないのでしょうか(確信が持てません)?
その後、オプションを削除して再起動すると、アプリは再び「通常」になりました! 何が起こっているのか誰にも分かりますか?