GC対策論

場合は、ガベージコレクションのアルゴリズム設計は、以下のさまざまな要因を考慮してください。

  • プログラムのスループット:あなたのアルゴリズムがどのように多くのプログラムを遅くしますか?これは、時にはそれがかかるCPU時間のガベージコレクションや有用な作業の割合として表されます。
  • GCスループット:CPU時間の与えられた一定量の場合には、どのくらいのガベージコレクタは削除できますか?
  • ヒープは費用:コレクター多くの余分なメモリは、少なくとも理論的に必要とされますか?あなたのプログラムがメモリを利用しますか、収集時に一時的な構造を割り当てるためにあなたのアルゴリズムは非常に緊張している場合は?
  • 滞留時間:あなたのコレクターはどのくらいの時間後に停止しますか?
  • 周波数を一時停止:あなたのコレクターは一旦停止どのくらいの頻度?
  • 配信を一時停止:あなたは、ほとんどの場合のような簡単なポーズです、時折長い時間を一時停止しますか?しかし、より安定した以上休止時間?
  • ディストリビューションのパフォーマンス:新しいメモリの割り当てが速いですか?それは遅いのですか?または予測できませんか?
  • コンパクト:需要を満たすのに十分な空き領域があるためスペースのあなたのコレクションに小片のヒープ内に分散されているかどうか、そこにある(OOM)エラーメモリーのうち、レポートかどうか?そうでない場合、あなたはそれが実際に十分なメモリを持っている場合でも、あなたのプログラムが遅くなることを発見し、最終的に死ぬことがあります。
  • 並行性:マルチコアマシンであなたのコレクターのパフォーマンスをどのように?
  • スケーラビリティ:スケールヒープのサイズに至るまで、GCはどのように振る舞います
  • 設定:コレクターの構成が非常に複雑になりますか?かどうかは箱のうち、最高のパフォーマンスを得ますか?
  • ウォームアップ時間を:あなたの自己調整アルゴリズムは、行動に基づいていますか?もしそうなら、どのくらいの時間は、最高の状態を達成するのにかかりますか?
  • メモリ・ページ:メモリ解放オペレーティング・システムへのアルゴリズムのバックを使用しない場合は?もしそうなら、とき?
  • ポータビリティ:あなたのGCは、CPUアーキテクチャに取り組んでいるが、一貫性を確保するためのx86メモリよりも弱い提供して?
  • 互換性:あなたのコレクションを使用して言語およびコンパイラ?私はそのようなC ++として、非GCデザイン言語ランタイムを使用することはできますか?それは、それを修正するためにコンパイルする必要がありますか?その場合は、すべてのプログラムとの依存関係を再コンパイルするGCアルゴリズムの必要性を変更しますか?

 

ここでは、ガベージコレクションのアルゴリズムを設計する際に考えることになるでしょうさまざまな要因は以下のとおりです。

  • プログラムのスループット:どのくらいあなたのアルゴリズムは、プログラムのダウンを遅らせるのでしょうか?これは時々有用な作業対コレクションに費やされたCPU時間の割合として表されます。
  • GCスループット:  どのくらいのゴミコレクターは明確なCPU時間の一定量を与えることができますか?
  • ヒープのオーバーヘッド:  あなたのコレクターはどのくらいの理論上の最小の上に追加のメモリを必要としていますか?あなたのアルゴリズムが収集しながら、一時的な構造体を割り当てた場合、非常にスパイクあなたのプログラムのメイクメモリ使用量のでしょうか?
  • 休止時間:  どのくらいあなたのコレクタが世界を停止していますか?
  • 周波数を一時停止:  どのくらいの頻度、あなたのコレクタは、世界を停止していますか?
  • 一時停止分布:  あなたは通常、非常に短い一時停止を持っていますが、時々非常に長い一時停止がありますか?それとも、少し長めにポーズを好むが、一貫していますか?
  • 配分のパフォーマンス:  新しいメモリの割り当てが速い、遅い、あるいは予測できないのですか?
  • 圧縮は:  そのスペースが小さな塊にヒープに散らばっとなっていますので、あなたのコレクターはこれまで、要求を満たすのに十分な空き領域があります場合でも、アウトオブメモリ(OOM)エラーを報告しますか?そうでない場合は、それが実際に継続するのに十分なメモリを持っていた場合でも、あなたのプログラムが遅くなるダウンし、最終的に金型を見つけることができます。
  • 同時実行:  どれだけあなたのコレクタ使用のマルチコアマシンのでしょうか?
  • スケーリング:  どれだけヒープとしてごコレクターの仕事は大きくなりのでしょうか?
  • チューニング:  どのように複雑で、あなたのコレクターの構成です箱のうち、最適なパフォーマンスを得るために?
  • ウォームアップ時間:  お使いのアルゴリズムのセルフアジャスト測定動作に基づいてないし、もしそうなら、どのくらいの時間が最適になるように時間がかかりますか?
  • ページリリース:  あなたのアルゴリズムでは、これまでのOSに未使用のメモリバックを解放しますか?もしそうなら、とき?
  • ポータビリティ:  x86のより弱いメモリ整合性保証を提供するCPUアーキテクチャ上のGC動作しますか?
  • 互換性:  を使用してコレクタの作業を何の言語およびコンパイラ?それは、C ++のようなGC用に設計されていない言語で実行することができますか?それはコンパイラの変更を必要としていますか?そしてもしそうなら、GCアルゴリズムは、すべてのプログラムとの依存関係を再コンパイルする必要が変更するのでしょうか?

 

https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e?gi=4838193726a6#.5j56cki9w

https://studygolang.com/articles/23377?fr=sidebar

公開された91元の記事 ウォン称賛7 ビュー120 000 +

おすすめ

転載: blog.csdn.net/Ture010Love/article/details/102957276