2016-10-29 7 views
9

は、だからそれがあります:https://groups.google.com/forum/?fromgroups#!topic/golang-dev/Ab1sFeoZg_8GCのポーズを1ms以下に下げることができますが、JVMにはない理由は何ですか?

今日、私は100マイクロ秒未満、典型的な最悪の場合のストップ世界の時間を作るガベージコレクタへの変更を提出しました。これにより、多くのアクティブなgoroutineを使用するアプリケーションの一時停止時間が大幅に改善されるはずです。

JVMのユーザーが長い間苦労している場合は、高GCの一時停止は1です。

JVMがGCの一時停止をGoレベルに低下させず、Goに影響を与えない(アーキテクチャ上の)制約は何ですか?

+1

私はGoが若いほど、JVMに追いつくのに苦労していると思います。ほとんどの場合そうですが、それを得ることから遠いです。 –

+2

JVMが1つしかないと思われるようです。あなたは仮定が間違っています。 – Volker

答えて

18

は、GCを下げるからJVMを防ぐ(建築?)の制約があるどのようなレベル

はありません

をgolangする一時停止します。

JVMのユーザーが長い間苦労している場合、高GCの一時停止は1です。

少しグーグルでは、同様のソリューションは、あまりにもJavaのために利用可能であることを示している

  • アズールは、RedHatのは、OpenJDKのにshenandoahに貢献しても、100ギガバイトまで拡張pauseless collector +
  • を提供しています。
  • IBMは、世代コレクターを圧縮、移動のとは違っても、
  • 他のさまざまなリアルタイムのJVM

OpenJDKの中の他のコレクターマイクロ秒の休止時間のためにされている目指し、metronomeを提供しています。これは、断片化の問題を回避し、バンプ・ポインタの割り振りを有効にし、GCで費やされるCPU時間を削減することによって、大きなヒープを持つサーバー・クラスのマシンでより高いスループットを提供することです。そして少なくとも良い条件の下では、移動する若い世代のコレクターとペアになっているにもかかわらず、CMSは1桁のミリ秒の休止を達成することができます。

Goのコレクタは非世代で非圧縮であり、書き込み障壁(このother SO questionを参照)を必要とするため、収集のためのCPUオーバーヘッドが増え、メモリフットプリント(断片化)ヒープ上(非コンパクトメモリレイアウト)。

関連する問題