Open8
GoのGCについてまとめたい
GCのアルゴリズムや、エスケープ解析について詳しい
スタック領域へなるべく割り当てられるようにできること
ポインタを避ける
ポインタ型はヒープ領域へ割り当てられます
そもそもポインタは色々重い処理を伴います
time.Timeを避ける
time.Timeはタイムゾーン情報をポインタで持っています
unix timeであれば整数型です
スライスと文字列を避ける
スライスと文字列は可変長のためメモリサイズを確定できないことからヒープ領域へ割り当てられます
配列であれば寿命が確定されればスタック領域へ割り当てられます
「避ける」と書きましたが、現実的には避けることが難しいケースがほとんどだと思いますので、ここら辺はあまり神経質になりすぎないほうがいいかもしれません。
Goのスタックとヒープについて
関数内だけで使われる値は、スタックに置かれる。
ある関数内で確保した値が、関数外でも必要になるなら、ヒープに置かれる。
というまとめ。
GCのアルゴリズムやその変遷について詳しい
GC用語とアルゴリズムの変遷について図を使ってわかりやすい
現在のGCの形になっている理由と具体的なアルゴリズムについて
GCの発展とそれに伴ってプロダクトにどう利用できるようになっていったのか
mutator についてわかりやすかった。
mutator (変化させるもの) は基本的に実行しているアプリケーションプログラムを指す。 mutator は、object を作成したり、object の参照を更新したりする。しかし、object の領域を解放することはしない(それは GC の仕事)。
ヒープとスタックのどちらに割り当てられるのか具体的に書いてある