Mercurial > hg > Papers > 2024 > matac-master
changeset 20:91b67726191c
...
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 11 Jan 2024 15:29:29 +0900 |
parents | 88d73431204d |
children | dcb4bb1e6bee |
files | Paper/master_paper.pdf Paper/master_paper.tex |
diffstat | 2 files changed, 29 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/master_paper.tex Tue Jan 09 18:03:19 2024 +0900 +++ b/Paper/master_paper.tex Thu Jan 11 15:29:29 2024 +0900 @@ -78,11 +78,6 @@ %要旨 \input{chapter/abstract.tex} - -%発表履歴 -\input{chapter/history.tex} -\addcontentsline{toc}{chapter}{研究関連論文業績} - \mainmatter %目次 \tableofcontents @@ -421,17 +416,38 @@ GCのアルゴリズムは大きく分けてMark \& Sweep GC,Reference counting GC, Copying GCの3つの種類が存在する. -Mark \& Sweep GC -Reference counting GC +Mark \& Sweep GCはマークフェーズとスイープフェーズからなる。 +マークフェーズはヒープ上でルートから参照することができるオブジェクト全てにマークをし, +その後、スイープフェーズでマークされていないオブジェクトを +使用されていないオブジェクトのリストであるフリーリストに接続することでGCを行う. +Reference counting GCはオブジェクトの被参照数を表すReference counterを用いるGCである. +新たに参照される度にReference counterをインクリメントし, +参照が外れる度にデクリメントする. +そのようにして,カウンターが0になった時点でフリーリストに接続することでGCを行う. CopyingGCはメモリ上のヒープ領域をFrom領域とTo領域に分割し, -ルートから参照できるオブジェクトをFrom領域からTo領域にコピーすることで -ガベージコレクションを行う. +ルートから参照できるオブジェクトをFrom領域からTo領域にコピーする. +From領域を参照していたポインタはTo領域のオブジェクトを参照するように置き換える. +その後,From領域とTo領域を入れ替えることでGCを行う. -また,Rust言語のスマートポインタによるメモリ管理手法も存在する. +一般的にこれらのGC手法は複数を組み合わせて用いられる. +世代別GCではオブジェクトの生存期間によって適用するGCアルゴリズムを使い分ける. +アロケートされてすぐのオブジェクトを新世代オブジェクト, +任意の回数のGCを生き残ったオブジェクトを旧世代オブジェクトとし, +それぞれの特性に合ったGCアルゴリズムを適用する. +すぐに回収されることが多い新世代オブジェクトはCopying GCで網羅的にGCをし, +長く生き残る旧世代オブジェクトはMark \& Sweep GCで適宜回収するなどが例として挙げられる. +このように複数のGCアルゴリズムを組み合わせることで, +それぞれのアルゴリズムの利点を享受できる. + +また,メモリ管理手法としてRust言語の所有権がある. +所有権ではメモリを所有する変数がスコープを抜ける時に, +同時にメモリも解放する. +そのためRustではGCの仕組みを必要とせず, +より高速にメモリの管理を行うことができる. \section{GearsFileSystemのGC} -GearsFileSystemのGCはCopyingGCを基本的なアルゴリズムとする. +GearsFileSystemのGCはCopying GCを基本的なアルゴリズムとする. GearsFileSystemにおけるデータは全てRedBlackTreeに格納する. また,ディスク上とメモリ上のデータ構造は同一である. @@ -571,8 +587,8 @@ %発表履歴 -%\addcontentsline{toc}{chapter}{発表履歴} -%\input{chapter/history.tex}] +\input{chapter/history.tex} +\addcontentsline{toc}{chapter}{研究関連論文業績} %付録 \addcontentsline{toc}{chapter}{付録}