私はwhy is it bad practice to call System.gc()と他の多くのものを読んでいます。 this oneは、実際には悲惨な誤用であるSystem.gc()
を説明しています。しかし、GC takes too longと、長い休止を避ける場合、例えばavoiding garbageである場合は、まったく簡単ではなく、コードを保守しにくくする場合があります。手動でGCを呼び出す手動GC呼び出しの使用例?
私見では、次の一般的なシナリオで結構です:
- 彼らの前にフェイルオーバーを持つ複数の交換可能webservesがあります。
- すべてのサーバーは数ギガバイトのヒープを使用し、STWの一時停止は平均的な要求よりもはるかに時間がかかります。
- GCがいつ起きるかは、フェールオーバーでは分かりません。
- フェールオーバーは、通知されたときにサーバーを免除することができます。
アルゴリズムは、サーバーを定期的に選択し、それ以上の要求を送信しないようにして、実行要求を完了させ、GCを実行させ、サーバーを再起動させます。
何か不足していると思いますか? 1,2
代替手段は何ですか?
長時間実行されるリクエストは問題になる可能性がありますが、それがないものとします。あるいは、単にGCが取るものに匹敵するいくつかの期間に待つことを制限する。遅い要求をさらに遅くすることはあまりにも悪くはありません。
-XX:+DisableExplicitGC
のようなオプションは、アルゴリズムを役に立たなくするかもしれませんが、使用しないでください(私の使用例には私が担当する専用サーバーが含まれています)。
imoが壊れていない場合は修正しないでください。メモリのためにパフォーマンスのボトルネックが見えない場合は、なぜそれについて心配ですか? –
@MitchWeaver合意しておけば、自動GCがあなたが望むことをしないと判断した場合にのみ、コントロールを試みるべきです。 –
@MitchWeaver私はそれをプレーニングと呼んでいます。多くのプロジェクトではGCに問題がありますので、それらも期待する必要があります。良い解決策があることを知っていると、今私はずっと心配していません。私の質問の理由は、誰もが "Heaven Calling GC!を禁止しました!"などの主張をしていたので、私は確認を求めていました。 – maaartinus