私はjdk6-u18 VM(solaris)で-XX:+DoEscapeAnalysis
有効になっているオプションを試してみましたが、かなり期待外れの経験がありました。私はかなり多くの俳優(そのうち20,000人)がいるscalaアプリケーションを実行しています。これはゴミ作りのレシピです!
通常のアプリでは、ヒープの256Mビットで実行が、生成することができます巨大なゴミの量を。その中に定常状態のこと:
エスケープ分析が役立つかもしれないと思ったので、オプションを有効にしてアプリを再実行しました。アプリが収集したガベージを取り除くことができなくなり、最終的にはGCの実行全体に時間を費やすようになり、アプリは完全に割り当てられた状態で「フラットライン」になることがわかりました。
この時点で、私はアプリがOutOfMemoryError
私が予想したものをスローしなかったと言う必要があります。おそらくJConsole
(分析の実行に使用していた)が、このオプションをオンにした状態でGC統計を適切に表示しない(確信がない)?
その後、オプションを削除して再起動すると、アプリは再び「通常」になりました。誰が何が起こっているのか考えていますか?
1エスケープ分析がJConsoleで有効になっていると表示されましたか?-serverオプションを使用してVMを実行していることを確認する必要があります。あなたはこれがうまくいったと思いますが、私はチェックしたいと思いました。
2エスケープ分析がScala Actorsの状況に役立つとは思いません。次のようなことをすると、大きな利益が得られる可能性があります。
def act():Unit = {
val omgHugeObject = new OMGHugeObject();
omgHugeObject.doSomethingCrazy();
}
上記の例では、EscapeAnalysisはomgHugeObject
ヒープではなくスタックに割り当てられるため、ガベージを作成しません。脱出分析が俳優に役立つとは思えません。それらの参照は常にアクターサブシステムに「エスケープ」します。
3 Scalaの最新リリースを使用していますか?最近のバージョンで修正されたと思うメモリリークがありました。これにより、Liftは、調査対象の独自のアクターライブラリを生成することもありました。
4 G1Garbageコレクターを試すことができます。
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加