2016-11-01 9 views
-3

タイトルによれば、Goで使用されているGCポリシーを変更することは可能でしょうか?Goに別のガベージコレクションポリシーを使用することはできますか?

+0

Javaよりもノブが少なくて済みます。 – twotwotwo

+1

現在、gcの実装には 'GOGC ='と 'GODBEUG = gcstoptheworld ='があります。これは実装とバージョン固有のものです。詳細については、[ランタイムパッケージのドキュメント](https://golang.org/pkg/runtime/)を参照してください。 – JimB

+0

具体的にお願いします。何をしたいですか? – thwd

答えて

1

Javaなどのようにまったく異なるコレクターを使用できるわけではありません。これは目的に合ったものです。どこからでもうまく動作し、GoプログラマにとってはGCパラメータのチューニングが専門になることを避けたいと考えています。

最もよく使用されるオプションはGOGCです。デフォルト値の100は、本質的に、別の収集がトリガされる前の最後のGC後に生存していたデータ量の2倍にプログラムを拡大させます。 200を使用すると、最後のGCの後でライブデータの3倍までプログラムを成長させることができます.50は1.5倍に成長します。収集の正確なタイミングとペーシングは、1.5をGCと同時に作成しているため、ボットの下ではもう少し複雑ですが、ライブデータ量の約2倍のピークメモリ使用量を目標にしています。

実際に言えば、私が見てきたように、プログラムのガベージコレクションの負荷を軽減するためにメモリを増やすことが分かっている人が増えています。人々は、たとえば、少し高速化するために、GOGC=400などのGoコンパイラを実行しています。しかし、CPU時間を数%増やすよりも多くのRAMを食べることでサーバを枯渇させるのはずっと悲惨です。

その他のノブはpackage runtimeに記載されています。現在の実装では、GCを強制的に停止させるか、runtime.GC()を使用して、潜在的に世界を止める可能性のあるコレクションを明示的にトリガすることができます。 GCノブとは別にruntimeReadMemStatsとプロファイルを得ることができます。です。

一般に、小さなGCチューニングにはほとんど焦点を合わせたくありません。デフォルトはかなりうまくいっていて、通常、あなたの時間はあなたのアプリケーションを考えるのによく使われます。

関連する問題