summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-02-22 11:35:22 +0900
committernsfisis <nsfisis@gmail.com>2025-02-22 11:35:22 +0900
commit9fe5e9aff4a99a60d36ad15f40283d19600383f6 (patch)
treeaa8d5b1e7bef10e89ffdfe1a92929a4bea6d2386
parent765921d696c3d9338035996845748f61f95c2f33 (diff)
downloadphpcon-nagoya-2025-slides-9fe5e9aff4a99a60d36ad15f40283d19600383f6.tar.gz
phpcon-nagoya-2025-slides-9fe5e9aff4a99a60d36ad15f40283d19600383f6.tar.zst
phpcon-nagoya-2025-slides-9fe5e9aff4a99a60d36ad15f40283d19600383f6.zip
updateHEADmain
-rw-r--r--slides.pdfbin492124 -> 466281 bytes
-rw-r--r--slides.saty70
2 files changed, 37 insertions, 33 deletions
diff --git a/slides.pdf b/slides.pdf
index 60f680e..be1cd96 100644
--- a/slides.pdf
+++ b/slides.pdf
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 なら解放する
* 処理後はルートバッファから取り除く
}
>