summaryrefslogtreecommitdiffhomepage
path: root/slides.saty
diff options
context:
space:
mode:
Diffstat (limited to 'slides.saty')
-rw-r--r--slides.saty70
1 files changed, 37 insertions, 33 deletions
diff --git a/slides.saty b/slides.saty
index 271dd89..1dff17d 100644
--- a/slides.saty
+++ b/slides.saty
@@ -75,13 +75,13 @@ document '<
+frame{はじめに}<
+p{
- メモリの容量は増え続けている
+ (長期的・平均的には) メモリの容量は増え続けている
}
>
+frame{はじめに}<
+p{
- メモリの容量は増え続けている
+ (長期的・平均的には) メモリの容量は増え続けている
}
+p{}
+p{
@@ -129,7 +129,7 @@ document '<
}
+p{}
+p{
- 必要なメモリのサイズを要求する
+ 必要なサイズのメモリを要求する
}
>
@@ -225,7 +225,13 @@ document '<
}
+p{}
+p{
- 参照されている数を数える
+ 自分を参照している別のオブジェクトの数 (参照カウント) を数えておく
+ }
+ +p{
+ 参照が増えたらカウントアップ
+ }
+ +p{
+ 参照が減ったらカウントダウン
}
+p{
ゼロになったら解放する
@@ -242,16 +248,16 @@ unset($a);
`#);
>
- +frame{参照カウント}<
- +code-block-php(`$a = ["foo"];
-$b = ["bar"];
-$a[] = $b;
-unset($b);
-unset($a);
-
-`#);
- +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_1.png`);
- >
+% +frame{参照カウント}<
+% +code-block-php(`$a = ["foo"];
+% $b = ["bar"];
+% $a[] = $b;
+% unset($b);
+% unset($a);
+%
+% `#);
+% +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_1.png`);
+% >
+frame{参照カウント}<
+code-block-php(`$a = ["foo"];
@@ -264,16 +270,16 @@ unset($a);
+fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_2.png`);
>
- +frame{参照カウント}<
- +code-block-php(`$a = ["foo"];
-$b = ["bar"];
-$a[] = $b;
-unset($b);
-unset($a);
-
-`#);
- +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_3.png`);
- >
+% +frame{参照カウント}<
+% +code-block-php(`$a = ["foo"];
+% $b = ["bar"];
+% $a[] = $b;
+% unset($b);
+% unset($a);
+%
+% `#);
+% +fig-abs-pos((127mm, 40mm))(include-image 127mm `assets/rc_3.png`);
+% >
+frame{参照カウント}<
+code-block-php(`$a = ["foo"];
@@ -532,7 +538,7 @@ unset($a);
ほとんどのオブジェクトは参照カウントで解放される
}
+p{
- 全オブジェクトを走査しなくていい
+ 循環参照だけ考えればいい
}
>
@@ -542,10 +548,10 @@ unset($a);
}
+p{}
+p{
- 循環参照「かもしれない」オブジェクトを登録しておく
+ 循環参照「かもしれない」オブジェクトをルートバッファに登録しておく
}
+p{
- そのオブジェクトとそこから辿れるオブジェクトだけ走査する
+ ルートバッファから本物の循環参照を探す
}
>
@@ -557,9 +563,8 @@ unset($a);
+p{
循環参照「かもしれない」オブジェクト
}
- +p{}
+p{
- refcount を減らしたときに 0 にならなかったもの
+ 参照カウントを減らしたときに 0 にならなかったもの
}
+p{
循環参照は、間接的に自分で自分を指している
@@ -572,8 +577,7 @@ unset($a);
}
+p{}
+listing{
- * 循環参照かもしれないオブジェクトをルートバッファへ登録する
- * ルートバッファから辿れる全オブジェクトの refcount を 1減らす
+ * ルートバッファから辿れる全オブジェクトの参照カウントを 1減らす
}
>
@@ -598,8 +602,8 @@ unset($a);
+p{}
+listing{
* すべてのルートバッファから辿れるオブジェクトについて、
- ** refcount が 0 でないなら1増やす
- ** refcount が 0 なら解放する
+ ** 参照カウントが 0 でないなら1増やす
+ ** 参照カウントが 0 なら解放する
* 処理後はルートバッファから取り除く
}
>