ºÇ½ª¹¹¿·¡§ author_nari 2010ǯ10·î25Æü(·î) 12:57:24ÍúÎò
¤Þ¤º¡¢CycleCollection¤È¤Ï
Reference Counting GC(RC)¤ÇȯÀ¸¤¹¤ë½Û´Ä»²¾È¤ò²þÁ±¤¹¤ë°Ù¤ÎGC¤Ç¤¢¤ë¡£
¤Ä¤Þ¤êRC¤Î²þÎÉÈÇ¡£
1.¥¤¥ó¥¯¥ê¥á¥ó¥È
¥¤¥ó¥¯¥ê¥á¥ó¥È¤Ç¤Ï+1¤¹¤ë¤È¶¦¤ËObject¤ÎColor¤òblack¤Ë¤¹¤ë
2.¥Ç¥¯¥ê¥á¥ó¥È
¿Þ¤Î¤è¤¦¤Ë¥Ç¥¯¥ê¥á¥ó¥È¤Ç¤Ï-1¤¹¤ë¤È¶¦¤Ë¡¢control_set¤Ë¥Ý¥¤¥ó¥¿¤ò¥×¥Ã¥·¥å¤¹¤ë¡£
¤½¤ÎºÝ¡¢ObjectColor¤òpurple¤Ë¤·¡¢¤¹¤Ç¤Ëpurple¤Ç¤¢¤ë¤â¤Î¤Ïcontrol_set¤Ë¤ÏÄɲ䷤ʤ¤¡£
3.Mark Gray
control_set¤¬¤¤¤Ã¤Ñ¤¤¤Ë¤Ê¤Ã¤¿¥¿¥¤¥ß¥ó¥°¤Çµ¯Æ°¤·¡¢¿Þ¤ÎÍͤËcontrol_set¤Ë¤¢¤ëObject¤È¤½¤Î»Ò¶¡¤òGray¤Ë¤¹¤ë¡£
¤½¤ì¤Ëȼ¤Ã¤Æ»Ò¶¡Object¤Î¤ß-1¤ò¹Ô¤¤¡¢½Û´Ä»²¾È¤À¤Ã¤¿¾ì¹ç¤ÏÁ´¤Æ0¤Ë¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
°Ê²¼µ¼»÷¥³¡¼¥É
4.scan
control_setÆâ¤Ç¥«¥¦¥ó¥È¤¬0¤Î¤â¤Î¤Î¤ßwhite¡¢¤½¤Î¾¤Ïblack¤ËÅɤêʬ¤±¡¢
¥«¥¦¥ó¥È¤ò¸º¤é¤·¤Æ¤¤¤¿gray¥ª¥Ö¥¸¥§¥¯¥È¤Ë+1¤ò¤·¡¢¥«¥¦¥ó¥È¤ò¸µ¤ËÌ᤹¡£
¤Þ¤¿¡¢control_set¤«¤é¤ß¤¨¤ëObject¤¬1°Ê¾å¤Ç¤¢¤Ã¤¿¾ì¹ç¡¢¤½¤ÎObject¤È»Ò¶¡¤Ë¤Ä¤¤¤Æ¤Ï
white¤Ë¤¹¤ë»ö¤Ï¤·¤Ê¤¤¡£
¡Ê¤Þ¤À»²¾È¤µ¤ì¤Æ¤¤¤ë°Ù¡Ë
5.collect_white
white¤ÎObject¤ò²ó¼ý¤·¤Æ¡¢½Û´Ä»²¾È¤¬²ò¾Ã¤µ¤ì¤ë¡£
¤½¤Î¸å¡¢control_set¤«¤épop¤µ¤ì¤ë¡£
Reference Counting GC(RC)¤ÇȯÀ¸¤¹¤ë½Û´Ä»²¾È¤ò²þÁ±¤¹¤ë°Ù¤ÎGC¤Ç¤¢¤ë¡£
¤Ä¤Þ¤êRC¤Î²þÎÉÈÇ¡£
1.¥¤¥ó¥¯¥ê¥á¥ó¥È
¥¤¥ó¥¯¥ê¥á¥ó¥È¤Ç¤Ï+1¤¹¤ë¤È¶¦¤ËObject¤ÎColor¤òblack¤Ë¤¹¤ë
2.¥Ç¥¯¥ê¥á¥ó¥È
¿Þ¤Î¤è¤¦¤Ë¥Ç¥¯¥ê¥á¥ó¥È¤Ç¤Ï-1¤¹¤ë¤È¶¦¤Ë¡¢control_set¤Ë¥Ý¥¤¥ó¥¿¤ò¥×¥Ã¥·¥å¤¹¤ë¡£
¤½¤ÎºÝ¡¢ObjectColor¤òpurple¤Ë¤·¡¢¤¹¤Ç¤Ëpurple¤Ç¤¢¤ë¤â¤Î¤Ïcontrol_set¤Ë¤ÏÄɲ䷤ʤ¤¡£
3.Mark Gray
control_set¤¬¤¤¤Ã¤Ñ¤¤¤Ë¤Ê¤Ã¤¿¥¿¥¤¥ß¥ó¥°¤Çµ¯Æ°¤·¡¢¿Þ¤ÎÍͤËcontrol_set¤Ë¤¢¤ëObject¤È¤½¤Î»Ò¶¡¤òGray¤Ë¤¹¤ë¡£
¤½¤ì¤Ëȼ¤Ã¤Æ»Ò¶¡Object¤Î¤ß-1¤ò¹Ô¤¤¡¢½Û´Ä»²¾È¤À¤Ã¤¿¾ì¹ç¤ÏÁ´¤Æ0¤Ë¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¡£
°Ê²¼µ¼»÷¥³¡¼¥É
MarkGray(S) if (color(S) != gray) color(S) = gray for C in S.child count(C) = count(C) - 1 MarkGray(C)
4.scan
control_setÆâ¤Ç¥«¥¦¥ó¥È¤¬0¤Î¤â¤Î¤Î¤ßwhite¡¢¤½¤Î¾¤Ïblack¤ËÅɤêʬ¤±¡¢
¥«¥¦¥ó¥È¤ò¸º¤é¤·¤Æ¤¤¤¿gray¥ª¥Ö¥¸¥§¥¯¥È¤Ë+1¤ò¤·¡¢¥«¥¦¥ó¥È¤ò¸µ¤ËÌ᤹¡£
¤Þ¤¿¡¢control_set¤«¤é¤ß¤¨¤ëObject¤¬1°Ê¾å¤Ç¤¢¤Ã¤¿¾ì¹ç¡¢¤½¤ÎObject¤È»Ò¶¡¤Ë¤Ä¤¤¤Æ¤Ï
white¤Ë¤¹¤ë»ö¤Ï¤·¤Ê¤¤¡£
¡Ê¤Þ¤À»²¾È¤µ¤ì¤Æ¤¤¤ë°Ù¡Ë
5.collect_white
white¤ÎObject¤ò²ó¼ý¤·¤Æ¡¢½Û´Ä»²¾È¤¬²ò¾Ã¤µ¤ì¤ë¡£
¤½¤Î¸å¡¢control_set¤«¤épop¤µ¤ì¤ë¡£
- ¥«¥Æ¥´¥ê¡§
- ¥Ñ¥½¥³¥ó
- ¥¬¡¼¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¡ÊGC¡Ë
¥³¥á¥ó¥È¤ò¤«¤¯