Go言語7つの入門チュートリアル7つのGCガベージコレクション3つのカラーマーカ
GC
{コード フルネーム {コード
ガベージコレクションのアルゴリズムには、トレースガベージコレクションと参照カウントの2種類が主流である。
/{br
3色マーカー方式は、トレース型ガベージコレクションアルゴリズムの1つです。
トレース・アルゴリズムの核となる考え方は、オブジェクトが到達可能かどうかを判断することです。なぜなら、いったん到達不可能になったオブジェクトは、GCによってすぐに再生されるからです。
オブジェクトが到達可能かどうかを判断する方法
/{br
は、2つのステップに分かれています。
- 最初のステップでは、グローバル変数と現在の関数スタックにある変数のうち、到達可能であるとマークされたものをすべて見つけます。 {を使用します。 第2段階では、すでにマークされているデータから、さらにアクセス可能な変数をマークしていく。このプロセスはクロージャの受け渡しとも呼ばれる。 {これはクロージャの受け渡しとも呼ばれる。
goが3色タグ付け方式を導入する以前、goが使用していたgcアルゴリズムが
line = (
Line()
.add_xaxis(xaxis_data=x_data)
.add_yaxis(
series_name='merchant_sales',
yaxis_data=y_data, # there is an error here
label_opts=opts.LabelOpts(is_show=False),
)
)
(マークアンドスイープ)。
このアルゴリズムは、厳密にはトレースベースのアルゴリズムに沿って実装されています。
- 最初にオブジェクトが使用されているかどうかを記録するためのフラグビットが設定され、最初はすべてのフラグビットが0である。
- オブジェクトに到達可能であることが判明した場合、次のように設定されます。
y_axis= y_data
となり、ステップバイステップの結果、ツリーのような結果になります。 {を使用します。
タグ付けのステップが終了すると、タグ付けされていないオブジェクトはクリーンアップされ、次のクリーンアップのためにすべてのタグ付けビットが再び0に設定されます。
このアルゴリズムの最大の問題点は
Mark-And-Sweep
は、実行中にプログラム全体を完全に停止させる必要があり、非同期に実行することはできません。
1
の操作になります。フラグビット0と1はマーカースイープ法の異なるステージで異なる意味を持つため、新しいオブジェクトがマークされていても誤って削除される可能性があります。リアルタイム性が要求されるシステムでは、ハングタイムが長くなるこのマーカースイープ方式は受け入れがたい。そこで、GC ランタイムの長いハングタイムの問題を解決するアルゴリズムが必要となり、それが 3 色タギング法です。
三色マーカー方式
3色マーカー法は、従来のMark-Sweepを改良したもので、コンカレントGCアルゴリズムである。
GC
原理は以下の通りです。
プロセス空間全体で各オブジェクトが占有するメモリはグラフとみなすことができ、初期状態では各メモリオブジェクトは白色で表示される。
最初
GC
スキャンタスクは、CPUが処理する複数の同時実行ゴルーチンとして直ちにスケジューラにキューイングされ、最初のラウンドで到達可能なすべてのメモリオブジェクトを最初にスキャンし、グレーとしてマークし、キューに配置されます
第二ラウンドは、世界を開始再開することができ、最初のキューで参照されるオブジェクトは、すべてのオブジェクトがグレーアウトされ、キューに追加され、オブジェクトは黒とキューから削除することができます。このサイクルが繰り返され、キューが空になると、グラフ全体には到達不可能なオブジェクト、つまり参照されていないオブジェクトである白いメモリ空間が残されることになる。
再び3巡目
on-the-fly
を使用して、2 回目のラウンドで追加された新しいオブジェクトが要求するメモリをマーク (グレーアウト) します。
stop the world
stop the world
writebarrier
on-the-fly
A, F
write-barrier
2. すべてのオブジェクトをホワイトコレクションに入れる。
3、そして、ルートノードからすべてのオブジェクトの反復処理を開始します(ここでは再帰的なトラバーサルではないことに注意してください)、白いコレクションから灰色のコレクションにトラバースされたオブジェクト。
ルートセットはA,Fを指しているので、探索開始からのルートノードは
ということで、AとFをグレーセットに入れています。
4、灰色のコレクションをトラバースした後、白のコレクションから灰色のコレクションに灰色のオブジェクトによって参照されるオブジェクトは、黒のコレクションにこの灰色のオブジェクトの後
このAはB、C、Dを指しているので、BCDをグレーに入れ、Aを黒に入れ、Fはどのオブジェクトも参照していないので、直接黒に入れるということが分かります。
5. グレーのオブジェクトが無くなるまで4を繰り返す
DはAを指しているのでDも黒に入れられ、BとCはFと同じ理由で黒の集合に入れられるので、指し示す対象はもうないのである。
6, by
オブジェクトの変更を検出し、上記の操作を繰り返す
このEGHはRootSetとは直接的にも間接的にも関係がないため、クリアされることになる。
画像
7、白い物(ゴミ)を全て回収する
画像
つまり、この場合、ルートセットに直接関連するオブジェクトや、ルートセットに間接的に関連するオブジェクトはクリアされないことがわかる。無関係なものだけがリサイクルされるのです。
参考ドキュメントです。
GCを説明する図
ライトバリアについて ライトバリアについて
以上、Go言語GCガベージコレクション3色マーカー入門チュートリアル7本の詳細でしたが、Go言語GCガベージコレクション3色マーカーについての詳細は、BinaryDevelopの他の関連記事にもご注目ください!(1)
Goの学習方法
初心者の方は、こんな感じでGo言語を学ぶことができますよ〜。
Goを始めるための7つの記事
最初の記事
初心者のための囲碁入門
第2部
プログラム構造およびデータ型の紹介
第3部
関数-メソッドインターフェース入門
第4部
チャンネルとGoroutineの同時プログラミング
第五部
ファイルおよびパッケージの操作と取り扱い
第6部
ネットワーク・プログラミング
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Go言語基本編 go docコマンドの使い方・例文詳細編
-
ゴルーチンモデルとスケジューリング戦略へのGo並行処理アプローチ
-
Go言語基本スライスの作成と初期化例詳細
-
Go言語基本デザインパターン - 戦略パターン例解説
-
囲碁言語基本閉鎖原理分析例詳細
-
golangはファイルをダウンロードするためにマルチプロセッシングを実装しています(ブレークポイント転送をサポート)。
-
Goにおけるタイムアウト制御の解決策
-
VS CodeのインストールとGo言語IDEの使用について
-
小学生でもわかるGolangの例外処理リカバリーパニック
-
go 言語のデバッグ: exec: "gcc": 実行可能ファイルが %PATH% に見つからない