diff options
| -rw-r--r-- | slides.pdf | bin | 492124 -> 466281 bytes | |||
| -rw-r--r-- | slides.saty | 70 |
2 files changed, 37 insertions, 33 deletions
| Binary files differ 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 なら解放する * 処理後はルートバッファから取り除く } > |
