2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「逆転ポインタ法によるガーベジコレクタ」を可視化してみた

Posted at

逆転ポインタ法について

@UtakoSaeki(佐伯 詩子)さんが逆転ポインタ法の記事を書かれています。

おお、懐かしい〜と思って、Javaで実装してみました。

過程を画面に表示してみた

このアルゴリズムですが、文章で読んでも、なかなか理解できません。
『これは、絶対、アニメーションのようにして見せた方が、面白いし理解も早いぞ』と思いました。

STEPボタンを押す毎に、1ステップずつ画面に表示するプログラムをJavaのSwingを使って作ってみました。

gc-01.png

こんな画面です。

1ステップずつ画面コピーをとっていると、大変なので、省略しますが、最終的に以下のようになりました。

gc-27.png

背景がグレーのセル(cons)が、使われていたセルです。
背景がオレンジ色のセルは、GCされた箇所を表しています。

4パターンのGC過程のアニメーションができます。

パターン1
(list (quote a) b)
パターン2
(let ((a 1) (b 2)) (list a b))
パターン3
((a . 1) (b . 2) (c . 3))
パターン4
((a 1) (c 2 3))

佐伯さんの記事によるとハノイの塔もできるそうです。

私はやった事はありませんが、以下のように書かれていましたのでできるのでしょう

有名なハノイの塔の問題はかなり簡単にスタック無し再帰を実現できる
練習問題です

詳しい画面コピーが見たい方は、こちらを参照ください。

逆転ポインター法は、メモリーが少ない時に有効な方法だそうです。
興味を持って頂けたら幸いです。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?