ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>
王å’刚,2003òq?2æœ?br>
写作本文的åˆè¡äh˜¯æƒ›_’Œå¤§å®¶åˆ†äín垃圾攉™›†åQ?Garbage Collection åQ‰æŠ€æœ¯ç®€å•而有‘£çš„å‘展åŒÓ€‚动½W”之å‰ï¼Œæˆ‘站在窗边,望了望æ£åœ¨å°åŒºé‡Œè£…è¿åžƒåœ¾çš„æ¸…‹zèžR。和生活ä¸çޝå«å·¥äºÞZ»¬æ¸…è¿åžƒåœ¾çš„工作相ä¼û|¼Œè½¯äšgå¼€å‘里的垃圾收集其实就是一¿U自动打扫和清除内å˜åžƒåœ¾çš„æŠ€æœ¯ï¼Œå®ƒå¯ä»¥æœ‰æ•ˆé˜²èŒƒåЍæ€å†…å˜åˆ†é…ä¸å¯èƒ½å‘生的两个å±é™©ï¼šå› 内å˜åžƒåœ¾è¿‡å¤šè€Œå¼•å‘的内å˜è€—å°½åQˆè¿™å’Œç”Ÿ‹zÕdžƒåœ‘Ö µå¡žæŽ’污管é“çš„å±é™©òq¶æ²¡æœ‰ä»€ä¹ˆæœ¬è´¨çš„ä¸åŒåQ‰ï¼Œä»¥åŠä¸æ°å½“的内å˜é‡Šæ”¾æ‰€é€ æˆçš„内å˜éžæ³•引用(˜q™ç±»ä¼égºŽæˆ‘们在生‹zÖM¸ä¹°åˆ°äº†ä¸€ç“¶å·²¾l过期三òq´çš„牛奶åQ‰ã€?
æ®åކå²å¦å®¶ä»¬ä»‹ç»åQŒå››åƒå¤šòq´å‰çš„å¤åŸƒåŠäººå·²¾l在城市里å¾è®¾äº†å®Œå–„的排污和垃圾清è¿è®¾æ–½åQŒä¸€åƒå¤šòq´å‰çš„ä¸å›½äh更是修ç‘äº†å½“æ—¶ä¸–ç•Œä¸Šä¿æ´èƒ½åŠ›æœ€å¼ºçš„éƒ½å¸‚ ——长安。今天,当我们在软äšgå¼€å‘ä¸ä½“验自动垃圾攉™›†çš„便æ·ä¸Žèˆ’适时åQŒæˆ‘们至ž®‘应当知é“,˜q™ç§æ‹’ç»æ‚䨕ã€è¿½æ±‚æ•´‹zçš„“垃圾攉™›†”¾_„¡¥žå…¶å®žæ˜¯äh¾c»è‡ªå¤ä»¥æ¥å°±å·²ç»å…·å¤‡äº†çš„ã€?
-------------------------------------------------------------------------------------------------------
国内的程åºå‘˜å¤§å¤šæ˜¯åœ¨ Java è¯è¨€ä¸ç¬¬ä¸€‹Æ¡æ„Ÿå—到垃圾攉™›†æŠ€æœ¯çš„巨大™ì…力的,许多äºÞZ¹Ÿå› æ¤æŠ?Java 和垃圾收集看æˆäº†å¯†ä¸å¯åˆ†çš„æ•´ä½“。但事实上,垃圾攉™›†æŠ€æœ¯æ—©åœ?Java è¯è¨€é—®ä¸–å‰?30 多年ž®±å·²¾lå‘展和æˆç†Ÿèµäh¥äº†ï¼Œ Java è¯è¨€æ‰€åšçš„ä¸è¿‡æ˜¯æŠŠ˜q™é¡¹¼œžå¥‡çš„æŠ€æœ¯å¸¦åˆîCº†òq¿å¤§½E‹åºå‘˜èín边而已ã€?
如果一定è¦ä¸ºåžƒåœ¾æ”¶é›†æŠ€æœ¯æ‰¾ä¸€ä¸ªåªç”Ÿå…„弟,那么åQ?Lisp è¯è¨€æ‰æ˜¯å½“ä¹‹æ— æ„§çš„äh选ã€?1960 òq´å‰åŽè¯žç”ŸäºŽ MIT çš?Lisp è¯è¨€æ˜¯ç¬¬ä¸€¿U高度ä¾èµ–于动æ€å†…å˜åˆ†é…技术的è¯è¨€åQ?Lisp ä¸å‡ 乎所有数æ®éƒ½ä»?#8220;è¡?#8221;çš„åÅžå¼å‡ºçŽŽÍ¼Œè€?#8220;è¡?#8221;所å ç”¨çš„ç©ºé—´åˆ™æ˜¯åœ¨å †ä¸åЍæ€åˆ†é…得到的ã€?Lisp è¯è¨€å…ˆå¤©ž®±å…·æœ‰çš„动æ€å†…å˜ç®¡ç†ç‰¹æ€§è¦æ±?Lisp è¯è¨€çš„设计者必™å»è§£å†›_ †ä¸æ¯ä¸€ä¸ªå†…å˜å—的自动释æ”ùN—®é¢˜ï¼ˆå¦åˆ™åQ?Lisp ½E‹åºå‘˜å°±å¿…然被程åºä¸ä¸è®¡å…¶æ•°çš?free æˆ?delete è¯å¥æ·Ò޲¡åQ‰ï¼Œ˜q™ç›´æŽ¥å¯¼è‡´äº†åžƒåœ¾æ”‰™›†æŠ€æœ¯çš„诞生和å‘展——说å¥é¢˜å¤–è¯åQŒä¸Šå¤§å¦æ—Óž¼Œä¸€ä½è€å¸ˆæ›‘Ö‘Šè¯‰æˆ‘们, Lisp 是对çŽîC»£è½¯äšgå¼€å‘æŠ€æœ¯èµA献最大的è¯è¨€ã€‚我当时对这一说法ä¸ä»¥ä¸ºç„¶åQšå¸ƒæ»¡äº†åœ†æ‹¬åøP¼Œçœ‹ä¸ŠåŽÕdƒ˜q·å®«ä¸€æ ïLš„ Lisp è¯è¨€æ€Žä¹ˆèƒ½æ¯” C è¯è¨€æˆ?Pascal è¯è¨€æ›´ä¼Ÿå¤§å‘¢åQŸä¸˜q‡çŽ°åœ¨ï¼Œå½“æˆ‘çŸ¥é“垃圾攉™›†æŠ€æœ¯ã€æ•°æ®ç»“构技术ã€äh工智能技术ã€åÆˆè¡Œå¤„ç†æŠ€æœ¯ã€è™šæ‹ŸæœºæŠ€æœ¯ã€å…ƒæ•°æ®æŠ€æœ¯ä»¥åŠç¨‹åºå‘˜ä»¬è€³ç†Ÿèƒ½è¯¦çš„许多技术都èµähºäº?Lisp è¯è¨€æ—Óž¼Œæˆ‘特别想å‘é‚£ä½è€å¸ˆå½“é¢é“æ‰åQŒåƈ收回我当时的òq¼ç¨šæƒÏx³•ã€?
知é“äº?Lisp è¯è¨€ä¸Žåžƒåœ¾æ”¶é›†çš„密切关系åQŒæˆ‘们就ä¸éš¾ç†è§£åQŒäؓ什么垃圾收集技术的两ä½å…ˆé©±è€?J. McCarthy å’?M. L. Minsky åŒæ—¶ä¹Ÿæ˜¯ Lisp è¯è¨€å‘展å²ä¸Šçš„é‡è¦äh物了ã€?J. McCarthy æ˜?Lisp 之父åQŒä»–åœ¨å‘æ˜?Lisp è¯è¨€çš„åŒæ—¶ä¹Ÿ½W¬ä¸€‹Æ¡å®Œæ•´åœ°æè¿°äº†åžƒåœ¾æ”¶é›†çš„½Ž—法和实现方å¼ï¼› M. L. Minsky 则在å‘展 Lisp è¯è¨€çš„过½E‹ä¸æˆäØ“äº†ä»Šå¤©å¥½å‡ ç§ä¸ÀLµåžƒåœ¾æ”‰™›†½Ž—æ³•çš„å¥ åŸÞZh——和当时ä¸å°‘技术大师的¾låŽ†ç›æ€¼¼åQ?J. McCarthy å’?M. L. Minsky 在许多ä¸åŒçš„æŠ€æœ¯é¢†åŸŸé‡Œéƒ½å–得了令äh艳ç±M的戞®±ã€‚也许,åœ?1960 òq´ä»£é‚£ä¸ªè½¯äšgå¼€å‘å²ä¸Šçš„æ‹“è’æ—¶ä»£é‡Œï¼Œæ€ç»´æ•æ·ã€æ„å¿—åšå®šçš„ç ”ç©¶è€…æ›´å®ÒŽ˜“æˆäØ“æ— æ‰€ä¸èƒ½çš„西部硬汉å§ã€?
在了解垃圾收集算法的èµähºä¹‹å‰åQŒæœ‰å¿…è¦å…ˆå›ž™å¾ä¸€ä¸‹å†…å˜åˆ†é…çš„ä¸»è¦æ–¹å¼ã€‚我们知é“,大多æ•îC¸»‹¹çš„è¯è¨€æˆ–è¿è¡ŒçŽ¯å¢ƒéƒ½æ”¯æŒä¸‰ç§æœ€åŸºæœ¬çš„内å˜åˆ†é…æ–¹å¼ï¼Œå®ƒä»¬åˆ†åˆ«æ˜¯ï¼š
一ã€é™æ€åˆ†é…( Static Allocation åQ‰ï¼šé™æ€å˜é‡å’Œå…¨å±€å˜é‡çš„分é…åÅžå¼ã€‚我们å¯ä»¥æŠŠé™æ€åˆ†é…的内å˜çœ‹æˆæ˜¯å®¶é‡Œçš„è€ç”¨å®¶å…·ã€‚通常åQŒå®ƒä»¬æ— 需释放和回æ”Óž¼Œå› äØ“æ²¡äh会天天把大衣柜当作垃圾扔到窗外ã€?
二ã€è‡ªåŠ¨åˆ†é…( Automatic Allocation åQ‰ï¼šåœ¨æ ˆä¸äؓ局部å˜é‡åˆ†é…内å˜çš„æ–ÒŽ³•ã€‚æ ˆä¸çš„内å˜å¯ä»¥éšç€ä»£ç å—é€€å‡ºæ—¶çš„å‡ºæ ˆæ“作被自动释放。这¾cÖM¼¼äºŽåˆ°å®¶ä¸ä¸²é—¨çš„访客,天色一晚就è¦å„回å„å®Óž¼Œé™¤äº†ä¸ªåˆ«ä¸è¯†æ—¶åŠ¡è€…ä»¥å¤–ï¼Œæˆ‘ä»¬ä¸€èˆ¬æ²¡å¿…è¦æŠŠå®¢äººæ†åœ¨åžƒåœ¾è¢‹é‡Œæ‰«åœ°å‡ºé—¨ã€?
三ã€åЍæ€åˆ†é…( Dynamic Allocation åQ‰ï¼šåœ¨å †ä¸åЍæ€åˆ†é…内å˜ç©ºé—´ä»¥å˜å‚¨æ•°æ®çš„æ–¹å¼ã€‚å †ä¸çš„内å˜å—å¥½åƒæˆ‘ä»¬æ—¥å¸æ€‹É用的˜¡å·¾¾U¸ï¼Œç”¨è¿‡äº†å°±å¾—扔到垃圄¡®±é‡Œï¼Œå¦åˆ™å±‹å†…ž®×ƒ¼šæ»¡åœ°ç‹ÆD—‰ã€‚åƒæˆ‘è¿™æ ïLš„æ‡’ähåšæ¢¦éƒ½æƒ³æœ‰ä¸€å°å®¶ç”¨æœºå™¨äh跟在íw«è¾¹æ‰“扫å«ç”Ÿã€‚在软äšgå¼€å‘ä¸åQŒå¦‚æžœä½ æ‡’å¾—é‡Šæ”¾å†…å˜åQŒé‚£ä¹ˆä½ 也需è¦ä¸€å°ç±»ä¼¼çš„æœºå™¨äººâ€”—这其实ž®±æ˜¯ä¸€ä¸ªç”±ç‰¹å®š½Ž—法实现的垃圾收集器ã€?
也就是说åQŒä¸‹é¢æåˆ°çš„æ‰€æœ‰åžƒåœ¾æ”¶é›†ç®—法都是在½E‹åº˜q行˜q‡ç¨‹ä¸æ”¶é›†åƈ清ç†åºŸæ—§“˜¡å·¾¾U?#8221;的算法,它们的æ“ä½œå¯¹è±¡æ—¢ä¸æ˜¯é™æ€å˜é‡ï¼Œä¹Ÿä¸æ˜¯å±€éƒ¨å˜é‡ï¼Œè€Œæ˜¯å †ä¸æ‰€æœ‰å·²åˆ†é…内å˜å—ã€?
-------------------------------------------------------------------------------------------------------
1960 òq´ä»¥å‰ï¼ŒäºÞZ»¬ä¸ø™ƒšèƒŽä¸çš?Lisp è¯è¨€è®¾è®¡åžƒåœ¾æ”‰™›†æœºåˆ¶æ—Óž¼Œ½W¬ä¸€ä¸ªæƒ³åˆ°çš„½Ž—法是引用计数算法。拿˜¡å·¾¾U¸çš„ä¾‹åæ¥è¯´åQŒè¿™¿U算法的原ç†å¤§è‡´å¯ä»¥æè¿°ä¸ºï¼š
åˆé¤æ—Óž¼Œä¸ÞZº†æŠŠè„‘å里½Hç„¶è·›_‡ºæ¥çš„设计ç‰|„Ÿè®îC¸‹æ¥ï¼Œæˆ‘从˜¡å·¾¾U¸è¢‹ä¸æŠ½å‡ÞZ¸€å¼ é¤å·„¡º¸åQŒæ‰“½Ž—在上é¢ç”Õd‡º¾pÈ»Ÿæž¶æž„çš„è“图。按ç…?#8220;˜¡å·¾¾U怋É用规¾U¦ä¹‹å¼•用计数ç‰?#8221;çš„è¦æ±‚,ç”Õd›¾ä¹‹å‰åQŒæˆ‘必须先在˜¡å·¾¾U¸çš„一角写上计数å€?1 åQŒä»¥è¡¨ç¤ºæˆ‘在使用˜q™å¼ ˜¡å·¾¾U¸ã€‚è¿™æ—Óž¼Œå¦‚æžœä½ ä¹Ÿæƒ³çœ‹çœ‹æˆ‘ç”Èš„è“图åQŒé‚£ä½ å°±è¦æŠŠ˜¡å·¾¾U怸Šçš„è®¡æ•°å€¼åŠ 1 åQŒå°†å®ƒæ”¹ä¸?2 åQŒè¿™è¡¨æ˜Žç›®å‰æœ?2 个ähåœ¨åŒæ—¶ä‹Éç”¨è¿™å¼ é¤å·„¡º¸åQˆå½“ç„Óž¼Œæˆ‘是ä¸ä¼šå…è®¸ä½ ç”¨˜q™å¼ ˜¡å·¾¾U¸æ¥æ“¦éËEæ¶•çš„åQ‰ã€‚ä½ çœ‹å®ŒåŽï¼Œå¿…é¡»æŠŠè®¡æ•°å€¼å‡ 1 åQŒè¡¨æ˜Žä½ 对该˜¡å·¾¾U¸çš„使用已绾l“æŸã€‚åŒæ øP¼Œå½“我ž®†é¤å·„¡º¸ä¸Šçš„内容全部誊写到笔记本上之åŽï¼Œæˆ‘也会自觉地把é¤å·„¡º¸ä¸Šçš„è®¡æ•°å€¼å‡ 1 ã€‚æ¤æ—Óž¼Œä¸å‡ºæ„外的è¯åQŒè¿™å¼ é¤å·„¡º¸ä¸Šçš„计数值应当是 0 åQŒå®ƒä¼šè¢«åžƒåœ¾æ”‰™›†å™¨â€”—å‡è®ùN‚£æ˜¯ä¸€ä¸ªä¸“门负责打扫å«ç”Ÿçš„æœºå™¨äººâ€”—æ¡èµäh¥æ‰”到垃圾½Ž±é‡ŒåQŒå› 为垃圾收集器的惟一使命ž®±æ˜¯æ‰‘Öˆ°æ‰€æœ‰è®¡æ•°å€égØ“ 0 çš„é¤å·„¡º¸òq¶æ¸…ç†å®ƒä»¬ã€?
引用计数½Ž—法的优点和¾~ºé™·åŒæ ·æ˜Žæ˜¾ã€‚这一½Ž—法在执行垃圾收集ä“Q务时速度较快åQŒä½†½Ž—法对程åºä¸æ¯ä¸€‹Æ¡å†…å˜åˆ†é…和指针æ“作æå‡ºäº†é¢å¤–çš„è¦æ±‚åQˆå¢žåŠ æˆ–å‡å°‘内å˜å—的引用计数åQ‰ã€‚æ›´é‡è¦çš„æ˜¯åQŒå¼•ç”¨è®¡æ•°ç®—æ³•æ— æ³•æ£¼‹®é‡Šæ”‘Öó@环引用的内å˜å—,å¯ÒޤåQ?D. Hillis 有一ŒDµé£Ž‘£è€Œç²¾è¾Ÿçš„è®ø™¿°åQ?
一天,一个å¦ç”Ÿèµ°åˆ?Moon é¢å‰è¯ß_¼š“我知é“如何设计一个更好的垃圾攉™›†å™¨äº†ã€‚我们必™å»è®°å½•æŒ‡å‘æ¯ä¸ªç»“点的指针数目ã€?#8221; Moon è€å¿ƒåœ°ç»™˜q™ä½å¦ç”Ÿè®²äº†ä¸‹é¢˜q™ä¸ªæ•…事åQ?#8220;一天,一个å¦ç”Ÿèµ°åˆ?Moon é¢å‰è¯ß_¼š‘我知é“如何设计一个更好的垃圾攉™›†å™¨äº†……’”
D. Hillis 的故事和我们ž®æ—¶å€™å¸¸è¯´çš„“ä»Žå‰æœ‰åñ”山,å±×ƒ¸Šæœ‰ä¸ªåº™ï¼Œåº™é‡Œæœ‰ä¸ªè€å’Œž®?#8221;的故事有异曲åŒå·¥ä¹‹å¦™ã€‚这说明åQŒå•是ä‹É用引用计数算法还ä¸èƒö以解军_žƒåœ¾æ”¶é›†ä¸çš„æ‰€æœ‰é—®é¢˜ã€‚æ£å› 䨓如æ¤åQŒå¼•ç”¨è®¡æ•°ç®—æ³•ä¹Ÿå¸¸å¸¸è¢«ç ”½I¶è€…们排除在ç‹ä¹‰çš„垃圾攉™›†½Ž—法之外。当ç„Óž¼Œä½œäؓ一¿U最½Ž€å•ã€æœ€ç›´è§‚的解å†Ïx–¹æ¡ˆï¼Œå¼•用计数½Ž—法本èínå…ähœ‰å…¶ä¸å¯æ›¿ä»£çš„优越性ã€?1980 òq´ä»£å‰åŽåQ?D. P. Friedman åQ?D. S. Wise åQ?H. G. Baker ½{‰äh对引用计数算法进行了数次改进åQŒè¿™äº›æ”¹˜q›ä‹É得引用计数算法åŠå…¶å˜¿U(如åšg˜qŸè®¡æ•°ç®—法ç‰åQ‰åœ¨½Ž€å•的环境下,或是在一些综åˆäº†å¤šç§½Ž—法的现代垃圾收集系¾lŸä¸ä»ç„¶å¯ä»¥ä¸€å±•èín手ã€?
-------------------------------------------------------------------------------------------------------
½W¬ä¸€¿U实用和完善的垃圾收集算法是 J. McCarthy ½{‰ähåœ?1960 òq´æå‡ºåƈæˆåŠŸåœ°åº”ç”¨äºŽ Lisp è¯è¨€çš„æ ‡è®ŽÍ¼æ¸…除½Ž—法。ä»ä»¥é¤å·„¡º¸ä¸ÞZ¾‹åQŒæ ‡è®ŽÍ¼æ¸…除½Ž—法的执行过½E‹æ˜¯˜q™æ ·çš„:
åˆé¤˜q‡ç¨‹ä¸ï¼Œ˜¡åŽ…é‡Œçš„æ‰€æœ‰ähéƒ½æ ¹æ®è‡ªå·Þqš„需è¦å–用é¤å·„¡º¸ã€‚当垃圾攉™›†æœºå™¨äººæƒ³æ”‰™›†åºŸæ—§˜¡å·¾¾U¸çš„æ—¶å€™ï¼Œå®ƒä¼šè®©æ‰€æœ‰ç”¨˜¡çš„人先åœä¸‹æ¥ï¼Œç„¶åŽåQŒä¾‹Æ¡è¯¢é—®é¤åŽ…é‡Œçš„æ¯ä¸€ä¸ªähåQ?#8220;ä½ æ£åœ¨ç”¨˜¡å·¾¾U¸å—åQŸä½ ç”¨çš„æ˜¯å“ªä¸€å¼ é¤å·„¡º¸åQ?#8221;æœºå™¨äººæ ¹æ®æ¯ä¸ªäh的回½{”å°†äºÞZ»¬æ£åœ¨ä½¿ç”¨çš„é¤å·„¡º¸ç”ÖM¸Šè®°å·ã€‚询问过½E‹ç»“æŸåŽåQŒæœºå™¨äh在é¤åŽ…é‡Œå¯ÀL‰¾æ‰€æœ‰æ•£è½åœ¨˜¡æ¡Œä¸Šä¸”没有记å·çš„é¤å·„¡º¸åQˆè¿™äº›æ˜¾ç„‰™ƒ½æ˜¯ç”¨˜q‡çš„废旧˜¡å·¾¾U¸ï¼‰åQŒæŠŠå®ƒä»¬¾lŸç»Ÿæ‰”到垃圾½Ž±é‡Œã€?
æ£å¦‚å…¶å¿U°æ‰€æš—ç¤ºçš„é‚£æ øP¼Œæ ‡è®°åQ清除算法的执行˜q‡ç¨‹åˆ†äØ““æ ‡è®°”å’?#8220;清除”两大阶段。这¿Uåˆ†æ¥æ‰§è¡Œçš„æ€èµ\å¥ å®šäº†çŽ°ä»£åžƒåœ¾æ”¶é›†ç®—æ³•çš„æ€æƒ³åŸºç¡€ã€‚与引用计数½Ž—法ä¸åŒçš„æ˜¯åQŒæ ‡è®ŽÍ¼æ¸…除½Ž—法ä¸éœ€è¦è¿è¡ŒçŽ¯å¢ƒç›‘‹¹‹æ¯ä¸€‹Æ¡å†…å˜åˆ†é…和指针æ“作åQŒè€Œåªè¦åœ¨“æ ‡è®°”阶段ä¸è·Ÿítªæ¯ä¸€ä¸ªæŒ‡é’ˆå˜é‡çš„æŒ‡å‘——用¾cÖM¼¼æ€èµ\实现的垃圾收集器也常被åŽäººç»Ÿ¿UîCؓ跟踪攉™›†å™¨ï¼ˆ Tracing Collector åQ?
ä¼´éšç€ Lisp è¯è¨€çš„æˆåŠŸï¼Œæ ‡è®°åQ清除算法也在大多数早期çš?Lisp ˜q行环境ä¸å¤§æ”‘Ö¼‚彩。尽½Ž¡æœ€åˆç‰ˆæœ¬çš„æ ‡è®°åQ清除算法在今天看楘q˜å˜åœ¨æ•ˆçއä¸é«˜ï¼ˆæ ‡è®°å’Œæ¸…除是两个相当耗时的过½E‹ï¼‰½{‰è¯¸å¤šç¼ºé™øP¼Œä½†åœ¨åŽé¢çš„讨è®ÞZ¸åQŒæˆ‘们å¯ä»¥çœ‹åˆŽÍ¼Œå‡ ä¹Žæ‰€æœ‰çŽ°ä»£åžƒåœ¾æ”¶é›†ç®—æ³•éƒ½æ˜¯æ ‡è®ŽÍ¼æ¸…é™¤æ€æƒ³çš„åšg¾l,仅æ¤ä¸€ç‚¹ï¼Œ J. McCarthy ½{‰äh在垃圾收集技术方é¢çš„贡献ž®×ƒ¸æ¯«ä¸äºšäºŽä»–们åœ?Lisp è¯è¨€ä¸Šçš„æˆå°±äº†ã€?
-------------------------------------------------------------------------------------------------------
ä¸ÞZº†è§£å†³æ ‡è®°åQ清除算法在垃圾攉™›†æ•ˆçŽ‡æ–šw¢çš„ç¼ºé™øP¼Œ M. L. Minsky äº?1963 òq´å‘表了著å的论æ–?#8220;一¿Uä‹É用åŒå˜å‚¨åŒºçš„ Lisp è¯è¨€åžƒåœ¾æ”‰™›†å™¨ï¼ˆ A LISP Garbage Collector Algorithm Using Serial Secondary Storage åQ?#8221;ã€?M. L. Minsky åœ¨è¯¥è®ºæ–‡ä¸æ˜q°çš„½Ž—法被äh们称为å¤åˆ¶ç®—法,它也è¢?M. L. Minsky 本ähæˆåŠŸåœ°å¼•å…¥åˆ°äº?Lisp è¯è¨€çš„一个实现版本ä¸ã€?
å¤åˆ¶½Ž—法别出心è£åœ°å°†å †ç©ºé—´ä¸€åˆ†äؓ二,òq¶ä‹É用简å•çš„å¤åˆ¶æ“作æ¥å®Œæˆåžƒåœ¾æ”¶é›†å·¥ä½œï¼Œ˜q™ä¸ªæ€èµ\相当有趣。借用˜¡å·¾¾U¸çš„æ¯”å–»åQŒæˆ‘们å¯ä»¥è¿™æ ïL†è§?M. L. Minsky çš„å¤åˆ¶ç®—法:
˜¡åŽ…è¢«åžƒåœ¾æ”¶é›†æœºå™¨äh分æˆå—区和北åŒÞZ¸¤ä¸ªå¤§ž®å®Œå…¨ç›¸åŒçš„部分。刘¡æ—¶åQŒæ‰€æœ‰äh都先在å—区用˜¡ï¼ˆå› 䨓½Iºé—´æœ‰é™åQŒç”¨˜¡äh数自然也ž®†å‡ž®‘一åŠï¼‰åQŒç”¨˜¡æ—¶å¯ä»¥éšæ„使用˜¡å·¾¾U¸ã€‚当垃圾攉™›†æœºå™¨äºø™®¤ä¸ºæœ‰å¿…è¦å›žæ”¶åºŸæ—§˜¡å·¾¾U¸æ—¶åQŒå®ƒä¼šè¦æ±‚所有用˜¡è€…以最快的速度从å—åŒø™{¿UÕdˆ°åŒ—区åQŒåŒæ—‰™šíw«æºå¸¦è‡ªå·±æ£åœ¨ä‹É用的˜¡å·¾¾U¸ã€‚ç‰æ‰€æœ‰äh都è{¿UÕdˆ°åŒ—区之åŽåQŒåžƒåœ¾æ”¶é›†æœºå™¨ähåªè¦½Ž€å•地把å—åŒÞZ¸æ‰€æœ‰æ•£è½çš„˜¡å·¾¾U¸æ‰”˜q›åžƒåœ„¡®±ž®Þq®—完æˆä»ÕdŠ¡äº†ã€‚ä¸‹ä¸€‹Æ¡åžƒåœ¾æ”¶é›†çš„工作˜q‡ç¨‹ä¹Ÿå¤§è‡´ç±»ä¼û|¼ŒæƒŸä¸€çš„ä¸åŒåªæ˜¯äh们的转移方å‘å˜æˆäº†ä»ŽåŒ—区到å—区。如æ¤åó@环往å¤ï¼Œæ¯æ¬¡åžƒåœ¾æ”‰™›†éƒ½åªéœ€½Ž€å•地转移åQˆä¹Ÿž®±æ˜¯å¤åˆ¶åQ‰ä¸€‹Æ¡ï¼Œåžƒåœ¾æ”‰™›†é€Ÿåº¦æ— 与伦比——当ç„Óž¼Œå¯¹äºŽç”¨é¤è€…å¾€˜q”奔波于å—北两区之间的辛劻I¼Œåžƒåœ¾æ”‰™›†æœºå™¨äººæ˜¯å†³ä¸ä¼šæµéœ²å‡ºä¸æ¯«æ€œæ‚¯çš„ã€?
M. L. Minsky çš„å‘æ˜Žç»å¯¹ç®—得上一¿U奇æ€å¦™æƒŸë€‚分区ã€å¤åˆ¶çš„æ€èµ\ä¸ä»…大幅æé«˜äº†åžƒåœ¾æ”¶é›†çš„æ•ˆçއåQŒè€Œä¸”也将原本¾Jçº·å¤æ‚的内å˜åˆ†é…算法å˜å¾—剿‰€æœªæœ‰åœ°ç®€æ˜Žå’Œæ‰ÆD¦åQˆæ—¢ç„¶æ¯‹Æ¡å†…å˜å›žæ”‰™ƒ½æ˜¯å¯¹æ•´ä¸ªåŠåŒºçš„回æ”Óž¼Œå†…å˜åˆ†é…时也ž®×ƒ¸ç”¨è€ƒè™‘内嘼„Žç‰‡½{‰å¤æ‚情况,åªè¦¿UÕdŠ¨å †é¡¶æŒ‡é’ˆåQŒæŒ‰™åºåºåˆ†é…内嘞®±å¯ä»¥äº†åQ‰ï¼Œ˜q™ç®€ç›´æ˜¯ä¸ªå¥‡˜q¹ï¼ä¸è¿‡åQŒä“Q何奇˜q¹çš„出现都有一定的代ähåQŒåœ¨åžƒåœ¾æ”‰™›†æŠ€æœ¯ä¸åQŒå¤åˆ¶ç®—法æé«˜æ•ˆçŽ‡çš„ä»£äh是äh为地ž®†å¯ç”¨å†…å˜ç¾ƒž®äº†ä¸€åŠã€‚实è¯å®žè¯ß_¼Œ˜q™ä¸ªä»£äh未å…也太高了一些ã€?
æ— è®ºä¼˜ç¼ºç‚¹å¦‚ä½•ï¼Œå¤åˆ¶½Ž—法在实践ä¸éƒ½èŽ·å¾—äº†å¯ä»¥ä¸Žæ ‡è®ŽÍ¼æ¸…除½Ž—法相比拟的æˆåŠŸã€‚é™¤äº?M. L. Minsky 本ähåœ?Lisp è¯è¨€ä¸çš„工作以外åQŒä»Ž 1960 òq´ä»£æœ«åˆ° 1970 òq´ä»£åˆï¼Œ R. R. Fenichel å’?J. C. Yochelson ½{‰äh也相¾l§åœ¨ Lisp è¯è¨€çš„ä¸åŒå®žçŽîC¸å¯¹å¤åˆ¶ç®—法进行了改进åQ?S. Arnborg 更是æˆåŠŸåœ°å°†å¤åˆ¶½Ž—法应用åˆîCº† Simula è¯è¨€ä¸ã€?
è‡Ïx¤åQŒåžƒåœ¾æ”¶é›†æŠ€æœ¯çš„ä¸‰å¤§ä¼ ç»Ÿ½Ž—æ³•â€”â€”å¼•ç”¨è®¡æ•°ç®—æ³•ã€æ ‡è®ŽÍ¼æ¸…除½Ž—法和å¤åˆ¶ç®—法——都已在 1960 òq´å‰åŽç›¸¾l§é—®ä¸–ï¼Œä¸‰ç§½Ž—æ³•å„æœ‰æ‰€é•¿ï¼Œä¹Ÿéƒ½å˜åœ¨è‡´å‘½çš„缺陗÷€‚从 1960 òq´ä»£åŽæœŸå¼€å§‹ï¼Œç ”究者的主覾_‘ÖŠ›é€æ¸è½¬å‘对这三ç§ä¼ 统½Ž—法˜q›è¡Œæ”¹è¿›æˆ–æ•´åˆï¼Œä»¥æ‰¬é•‰K¿çŸï¼Œé€‚应½E‹åºè®¾è®¡è¯è¨€å’Œè¿è¡ŒçŽ¯å¢ƒå¯¹åžƒåœ¾æ”‰™›†çš„æ•ˆçŽ‡å’Œå®žæ—¶æ€§æ‰€æå‡ºçš„æ›´é«˜è¦æ±‚ã€?
-------------------------------------------------------------------------------------------------------
ä»?1970 òq´ä»£å¼€å§‹ï¼Œéšç€¿U‘å¦ç ”究和应用实è·ëŠš„䏿–深入åQŒäh们逿¸æ„识刎ͼŒä¸€ä¸ªç†æƒ³çš„垃圾攉™›†å™¨ä¸åº”在˜q行时导致应用程åºçš„æš‚åœåQŒä¸åº”é¢å¤–å 用大é‡çš„内嘽Iºé—´å’?CPU 资æºåQŒè€Œä¸‰¿Uä¼ ¾lŸçš„垃圾攉™›†½Ž—æ³•éƒ½æ— æ³•æ»¡‘Œ™¿™äº›è¦æ±‚。äh们必™åÀL出更新的½Ž—法或æ€èµ\åQŒä»¥è§£å†³å®žè·µä¸ç¢°åˆ°çš„诸多éšùN¢˜ã€‚当æ—Óž¼Œç ”ç©¶è€…çš„åŠªåŠ›ç›®æ ‡åŒ…æ‹¬åQ?
½W¬ä¸€åQŒæé«˜åžƒåœ¾æ”¶é›†çš„æ•ˆçŽ‡ã€‚ä‹Éç”¨æ ‡è®ŽÍ¼æ¸…é™¤½Ž—æ³•çš„åžƒåœ¾æ”¶é›†å™¨åœ¨å·¥ä½œæ—¶è¦æ¶ˆè€—相当多çš?CPU 资æºã€‚早期的 Lisp ˜q行环境攉™›†å†…å˜åžƒåœ¾çš„æ—¶é—´ç«Ÿå 到了系¾lŸæ€»è¿è¡Œæ—¶é—´çš„ 40% åQâ€”â€”åžƒåœ¾æ”¶é›†æ•ˆçŽ‡çš„ä½Žä¸‹ç›´æŽ¥é€ å°±äº?Lisp è¯è¨€åœ¨æ‰§è¡Œé€Ÿåº¦æ–šw¢çš„åå声åQ›ç›´åˆîC»Šå¤©ï¼Œè®¸å¤šäºø™¿˜æ¡äšgå射似地误以为所æœ?Lisp ½E‹åºéƒ½å¥‡æ…¢æ— 比ã€?
½W¬äºŒåQŒå‡ž®‘垃圾收集时的内å˜å 用。这一问题主è¦å‡ºçŽ°åœ¨å¤åˆ¶ç®—法ä¸ã€‚å°½½Ž¡å¤åˆ¶ç®—法在效率上获得了质的½Hç ´åQŒä½†ç‰ºç‰²ä¸€åŠå†…å˜ç©ºé—´çš„代ähä»ç„¶æ˜¯å·¨å¤§çš„。在计算机å‘展的早期åQŒåœ¨å†…å˜ä»äh ¼ä»?KB 计算的日å里åQŒæµªè´¹å®¢æˆïLš„一åŠå†…å˜ç©ºé—´ç®€ç›´å°±æ˜¯åœ¨å˜ç›¸æ•²è¯ˆæˆ–拦路打劫ã€?
½W¬ä¸‰åQŒå¯»æ‰‘Ö®žæ—¶çš„垃圾攉™›†½Ž—æ³•ã€‚æ— è®ºæ‰§è¡Œæ•ˆçŽ‡å¦‚ä½•ï¼Œä¸‰ç§ä¼ 统的垃圾收集算法在执行垃圾攉™›†ä»ÕdŠ¡æ—‰™ƒ½å¿…须打施E‹åºçš„当å‰å·¥ä½œã€‚è¿™¿Uå› åžƒåœ¾æ”‰™›†è€Œé€ æˆçš„åšg时是许多½E‹åºåQŒç‰¹åˆ«æ˜¯æ‰§è¡Œå…³é”®ä»ÕdŠ¡çš„ç¨‹åºæ²¡æœ‰åŠžæ³•å®¹å¿çš„ã€‚å¦‚ä½•å¯¹ä¼ ç»Ÿ½Ž—法˜q›è¡Œæ”¹è¿›åQŒä»¥ä¾¿å®žçŽîC¸€¿U在åŽå°æ‚„悄执行åQŒä¸å½±å“——或臛_°‘看上åŽÖM¸å½±å“——当å‰è¿›½E‹çš„实时垃圾攉™›†å™¨ï¼Œ˜q™æ˜¾ç„¶æ˜¯ä¸€ä»¶æ›´å…ähŒ‘战性的工作ã€?
ç ”ç©¶è€…ä»¬æŽ¢å¯»æœªçŸ¥é¢†åŸŸçš„å†³å¿ƒå’Œç ”ç©¶å·¥ä½œçš„è¿›å±•é€Ÿåº¦åŒæ ·ä»¤äh惊奇åQšåœ¨ 1970 òq´ä»£åˆ?1980 òq´ä»£çš„çŸçŸåå‡ å¹´ä¸ï¼Œä¸€å¤§æ‰¹åœ¨å®žç”¨ç³»¾lŸä¸è¡¨çŽ°ä¼˜å¼‚çš„æ–°½Ž—法和新æ€èµ\è„±é¢–è€Œå‡ºã€‚æ£æ˜¯å› 为有了这些日‘‹æˆç†Ÿçš„垃圾攉™›†½Ž—法åQŒä»Šå¤©çš„æˆ‘们æ‰èƒ½åœ?Java æˆ?.NET æä¾›çš„è¿è¡ŒçŽ¯å¢ƒä¸éšå¿ƒæ‰€‹Æ²åœ°åˆ†é…内å˜å—,而ä¸å¿…担心空间释放时的风险ã€?
-------------------------------------------------------------------------------------------------------
æ ‡è®°åQæ•´ç†ç®—æ³•æ˜¯æ ‡è®°åQ清除算法和å¤åˆ¶½Ž—法的有机结åˆã€‚æŠŠæ ‡è®°åQ清除算法在内å˜å 用上的优点和å¤åˆ¶ç®—法在执行效率上的牚w•¿¾l¼åˆèµäh¥åQŒè¿™æ˜¯æ‰€æœ‰äh都希望看到的¾l“果。丘q‡ï¼Œä¸¤ç§åžƒåœ¾æ”‰™›†½Ž—法的整åˆåƈä¸åƒ 1 åŠ?1 ½{‰äºŽ 2 é‚£æ ·½Ž€å•,我们必须引入一些全新的æ€èµ\ã€?1970 òq´å‰åŽï¼Œ G. L. Steele åQ?C. J. Cheney å’?D. S. Wise ½{‰ç ”½I¶è€…陆¾l找åˆîCº†æ£ç¡®çš„æ–¹å‘ï¼Œæ ‡è®°åQæ•´ç†ç®—æ³•çš„è½®å»“ä¹Ÿé€æ¸æ¸…晰了è“væ¥ï¼š
在我们熟悉的˜¡åŽ…é‡Œï¼Œ˜q™ä¸€‹Æ¡ï¼Œåžƒåœ¾æ”‰™›†æœºå™¨äºÞZ¸å†æŠŠ˜¡åŽ…åˆ†æˆä¸¤ä¸ªå—åŒ—åŒºåŸŸäº†ã€‚éœ€è¦æ‰§è¡Œåžƒåœ¾æ”¶é›†ä“Q务时åQŒæœºå™¨ähå…ˆæ‰§è¡Œæ ‡è®ŽÍ¼æ¸…é™¤½Ž—法的第一个æ¥éª¤ï¼Œä¸ºæ‰€æœ‰ä‹É用ä¸çš„é¤å·„¡º¸ç”Õd¥½æ ‡è®°åQŒç„¶åŽï¼Œæœºå™¨äººå‘½ä»¤æ‰€æœ‰å°±˜¡è€…å¸¦ä¸Šæœ‰æ ‡è®°çš„é¤å·„¡º¸å‘é¤åŽ…çš„å—é¢é›†ä¸åQŒåŒæ—¶æŠŠæ²¡æœ‰æ ‡è®°çš„废旧é¤å·„¡º¸æ‰”员¡åŽ…åŒ—é¢ã€‚è¿™æ ·ä¸€æ¥ï¼Œæœºå™¨äººåªæ¶ˆç«™åœ¨é¤åŽ…åŒ—é¢ï¼Œæ€€æŠ±åžƒåœ„¡®±åQŒè¿ŽæŽ¥æ‰‘é¢è€Œæ¥çš„废旧é¤å·„¡º¸ž®Þp¡Œäº†ã€?
实验表明åQŒæ ‡è®ŽÍ¼æ•´ç†½Ž—法的æ€ÖM½“æ‰§è¡Œæ•ˆçŽ‡é«˜äºŽæ ‡è®°åQ清除算法,åˆä¸åƒå¤åˆ¶ç®—æ³•é‚£æ ·éœ€è¦ç‰ºç‰²ä¸€åŠçš„å˜å‚¨½Iºé—´åQŒè¿™æ˜„¡„¶æ˜¯ä¸€¿Uéžå¸¸ç†æƒ³çš„¾l“果。在许多çŽîC»£çš„垃圾收集器ä¸ï¼ŒäºÞZ»¬éƒ½ä‹Éç”¨äº†æ ‡è®°åQæ•´ç†ç®—法或其改˜q›ç‰ˆæœ¬ã€?
-------------------------------------------------------------------------------------------------------
å¯¹å®žæ—¶åžƒåœ¾æ”¶é›†ç®—æ³•çš„ç ”ç©¶ç›´æŽ¥å¯ÆD‡´äº†å¢žé‡æ”¶é›†ç®—法的诞生ã€?
最åˆï¼ŒäºÞZ»¬å…³äºŽå®žæ—¶åžƒåœ¾æ”‰™›†çš„æƒ³æ³•是˜q™æ ·çš„:ä¸ÞZº†˜q›è¡Œå®žæ—¶çš„垃圾收集,å¯ä»¥è®¾è®¡ä¸€ä¸ªå¤š˜q›ç¨‹çš„è¿è¡ŒçŽ¯å¢ƒï¼Œæ¯”å¦‚ç”¨ä¸€ä¸ªè¿›½E‹æ‰§è¡Œåžƒåœ¾æ”¶é›†å·¥ä½œï¼Œå¦ä¸€ä¸ªè¿›½E‹æ‰§è¡Œç¨‹åºä»£ç ã€‚è¿™æ ·ä¸€æ¥ï¼Œåžƒåœ¾æ”‰™›†å·¥ä½œçœ‹ä¸ŠåŽÕd°±ä»¿ä½›æ˜¯åœ¨åŽå°æ‚„悄完æˆçš„,ä¸ä¼šæ‰“æ–½E‹åºä»£ç çš„è¿è¡Œã€?
在收集é¤å·„¡º¸çš„例åä¸åQŒè¿™ä¸€æ€èµ\å¯ä»¥è¢«ç†è§£äØ“åQšåžƒåœ¾æ”¶é›†æœºå™¨äh在äh们用˜¡çš„åŒæ—¶å¯ÀL‰¾åºŸå¼ƒçš„é¤å·„¡º¸òq¶å°†å®ƒä»¬æ‰”到垃圾½Ž±é‡Œã€‚这个看似简å•çš„æ€èµ\会在设计和实现时¼„îC¸Š˜q›ç¨‹é—´å†²½Hçš„éšùN¢˜ã€‚比如说åQŒå¦‚果垃圾收集进½E‹åŒ…æ‹¬æ ‡è®°å’Œæ¸…é™¤ä¸¤ä¸ªå·¥ä½œé˜¶æ®µåQŒé‚£ä¹ˆï¼Œåžƒåœ¾æ”‰™›†å™¨åœ¨½W¬ä¸€é˜¶æ®µä¸è¾›è¾›è‹¦è‹¦æ ‡è®°å‡ºçš„结果很å¯èƒ½è¢«å¦ä¸€ä¸ªè¿›½E‹ä¸çš„å†…å˜æ“作代ç 修改得é¢ç›®å…¨éžåQŒä»¥è‡³äºŽ½W¬äºŒé˜¶æ®µçš„工作没有办法开展ã€?
M. L. Minsky å’?D. E. Knuth 对实时垃圾收集过½E‹ä¸çš„æŠ€æœ¯éš¾ç‚¹è¿›è¡Œäº†æ—©æœŸçš„ç ”½IÓž¼Œ G. L. Steele äº?1975 òq´å‘è¡¨äº†é¢˜äØ““多进½E‹æ•´ç†çš„垃圾攉™›†åQ?Multiprocessing compactifying garbage collection åQ?#8221;的论文,æè¿°äº†ä¸€¿U被åŽäh¿UîCØ““ Minsky-Knuth-Steele ½Ž—法”的实时垃圾收集算法ã€?E. W. Dijkstra åQ?L. Lamport åQ?R. R. Fenichel å’?J. C. Yochelson ½{‰äh也相¾l§åœ¨æ¤é¢†åŸŸåšå‡ÞZº†å„自的èµA献ã€?1978 òqß_¼Œ H. G. Baker å‘表äº?#8220;串行计算æœÞZ¸Šçš„å®žæ—¶è¡¨å¤„ç†æŠ€æœ¯ï¼ˆ List Processing in Real Time on a Serial Computer åQ?#8221;一文,¾pÈ»Ÿé˜è¿°äº†å¤š˜q›ç¨‹çŽ¯å¢ƒä¸‹ç”¨äºŽåžƒåœ¾æ”¶é›†çš„å¢žé‡æ”‰™›†½Ž—法ã€?
å¢žé‡æ”‰™›†½Ž—法的基¼‹€ä»æ˜¯ä¼ ç»Ÿçš„æ ‡è®ŽÍ¼æ¸…é™¤å’Œå¤åˆ¶ç®—æ³•ã€‚å¢žé‡æ”¶é›†ç®—法通过对进½E‹é—´å†²çªçš„妥善处ç†ï¼Œå…许垃圾攉™›†˜q›ç¨‹ä»¥åˆ†é˜¶æ®µçš„æ–¹å¼å®Œæˆæ ‡è®°ã€æ¸…ç†æˆ–å¤åˆ¶å·¥ä½œã€‚详¾l†åˆ†æžå„¿Uå¢žé‡æ”¶é›†ç®—æ³•çš„å†…éƒ¨æœºç†æ˜¯ä¸€ä»¶ç›¸å½“ç¹ç的事情åQŒåœ¨˜q™é‡ŒåQŒè¯»è€…们需è¦äº†è§£çš„仅仅是: H. G. Baker ½{‰äh的努力已¾l将实时垃圾攉™›†çš„æ¢¦æƒ›_˜æˆäº†çŽ°å®žåQŒæˆ‘们å†ä¹Ÿä¸ç”¨äؓ垃圾攉™›†æ‰“æ–½E‹åºçš„è¿è¡Œè€Œçƒ¦æégº†ã€?
-------------------------------------------------------------------------------------------------------
和大多数软äšgå¼€å‘æŠ€æœ¯ä¸€æ øP¼Œ¾lŸè®¡å¦åŽŸç†æ€»èƒ½åœ¨æŠ€æœ¯å‘展的˜q‡ç¨‹ä¸è“v到强力催化剂的作用ã€?1980 òq´å‰åŽï¼Œå–„äºŽåœ¨ç ”½I¶ä¸ä½¿ç”¨¾lŸè®¡åˆ†æžçŸ¥è¯†çš„æŠ€æœ¯äh员å‘玎ͼŒå¤§å¤šæ•°å†…å˜å—的生å˜å‘¨æœŸéƒ½æ¯”较çŸï¼Œåžƒåœ¾æ”‰™›†å™¨åº”å½“æŠŠæ›´å¤šçš„ç²¾åŠ›æ”¾åœ¨æ£€æŸ¥å’Œæ¸…ç†æ–°åˆ†é…的内å˜å—上。这个å‘现对于垃圾收集技术的价值å¯ä»¥ç”¨˜¡å·¾¾U¸çš„例忦‚括如下åQ?
如果垃圾攉™›†æœºå™¨äºø™ƒöå¤Ÿèªæ˜Žï¼Œäº‹å…ˆæ‘¸æ¸…了é¤åŽ…é‡Œæ¯ä¸ªäººåœ¨ç”¨é¤æ—¶ä‹É用é¤å·„¡º¸çš„ä¹ æƒ¯â€”â€”æ¯”å¦‚æœ‰äº›äh喜欢在用˜¡å‰åŽå„ç”¨æŽ‰ä¸€å¼ é¤å·„¡º¸åQŒæœ‰çš„äh喜欢自始至终攥ç€ä¸€å¼ é¤å·„¡º¸ä¸æ”¾åQŒæœ‰çš„ähåˆ™æ¯æ‰“一个喷åšå°±ç”¨åŽ»ä¸€å¼ é¤å·„¡º¸â€”—机器ähž®±å¯ä»¥åˆ¶å®šå‡ºæ›´å®Œå–„çš„˜¡å·¾¾U¸å›žæ”¶è®¡åˆ’,òq¶æ€ÀL˜¯åœ¨äh们刚扔掉˜¡å·¾¾U¸æ²¡å¤šä¹…ž®±æŠŠåžƒåœ¾æ¡èµ°ã€‚è¿™¿U基于统计å¦åŽŸç†çš„åšæ³•当然å¯ä»¥è®©˜¡åŽ…çš„æ•´‹z度æˆå€æé«˜ã€?
D. E. Knuth åQ?T. Knight åQ?G. Sussman å’?R. Stallman ½{‰äh对内å˜åžƒåœ„¡š„分类处ç†åšäº†æœ€æ—©çš„ç ”ç©¶ã€?1983 òqß_¼Œ H. Lieberman å’?C. Hewitt å‘表了题ä¸?#8220;åŸÞZºŽå¯¹è±¡å¯¿å‘½çš„一¿U实时垃圾收集器åQ?A real-time garbage collector based on the lifetimes of objects åQ?#8221;的论文。这½‹‡è‘—åçš„è®ºæ–‡æ ‡å¿—ç€åˆ†ä»£æ”‰™›†½Ž—法的æ£å¼è¯žç”Ÿã€‚æ¤åŽï¼Œåœ?H. G. Baker åQ?R. L. Hudson åQ?J. E. B. Moss ½{‰äh的共åŒåŠªåŠ›ä¸‹åQŒåˆ†ä»£æ”¶é›†ç®—æ³•é€æ¸æˆäؓ了垃圾收集领域里的主‹¹æŠ€æœ¯ã€?
分代攉™›†½Ž—法通常ž®†å †ä¸çš„内å˜å—æŒ‰å¯¿å‘½åˆ†äØ“ä¸¤ç±»åQŒå¹´è€çš„和年è½Èš„。垃圾收集器使用ä¸åŒçš„æ”¶é›†ç®—法或攉™›†½{–ç•¥åQŒåˆ†åˆ«å¤„ç†è¿™ä¸¤ç±»å†…å˜å—,òq¶ç‰¹åˆ«åœ°æŠŠä¸»è¦å·¥ä½œæ—¶é—´èŠ±åœ¨å¤„ç†å¹´è½Èš„内å˜å—上。分代收集算法ä‹É垃圾攉™›†å™¨åœ¨æœ‰é™çš„èµ„æºæ¡ä»¶ä¸‹åQŒå¯ä»¥æ›´ä¸ºæœ‰æ•ˆåœ°å·¥ä½œâ€”—这¿U效率上的æé«˜åœ¨ä»Šå¤©çš?Java 虚拟æœÞZ¸å¾—åˆ°äº†æœ€å¥½çš„è¯æ˜Žã€?
-------------------------------------------------------------------------------------------------------
Lisp 是垃圾收集技术的½W¬ä¸€ä¸ªå—ç›Šè€…ï¼Œä½†æ˜¾ç„¶ä¸æ˜¯æœ€åŽä¸€ä¸ªã€‚在 Lisp è¯è¨€ä¹‹åŽåQŒè®¸è®¸å¤šå¤šä¼ ¾lŸçš„ã€çŽ°ä»£çš„ã€åŽçŽîC»£çš„è¯a€å·²ç»æŠŠåžƒåœ¾æ”¶é›†æŠ€æœ¯æ‹‰å…¥äº†è‡ªå·±çš„æ€€æŠ±ã€‚éšä¾¿ä‹Då‡ ä¸ªä¾‹åå§ï¼šè¯žç”Ÿäº?1964 òq´çš„ Simula è¯è¨€åQ?1969 òq´çš„ Smalltalk è¯è¨€åQ?1970 òq´çš„ Prolog è¯è¨€åQ?1973 òq´çš„ ML è¯è¨€åQ?1975 òq´çš„ Scheme è¯è¨€åQ?1983 òq´çš„ Modula-3 è¯è¨€åQ?1986 òq´çš„ Eiffel è¯è¨€åQ?1987 òq´çš„ Haskell è¯è¨€……它们都先åŽä‹É用了自动垃圾攉™›†æŠ€æœ¯ã€‚当ç„Óž¼Œæ¯ä¸€¿Uè¯a€ä½¿ç”¨çš„垃圾收集算法å¯èƒ½ä¸ž®½ç›¸åŒï¼Œå¤§å¤šæ•°è¯a€å’Œè¿è¡ŒçŽ¯å¢ƒç”šè‡›_Œæ—¶ä‹É用了多ç§åžƒåœ¾æ”‰™›†½Ž—æ³•ã€‚ä½†æ— è®ºæ€Žæ ·åQŒè¿™äº›å®žä¾‹éƒ½è¯´æ˜ŽåQŒåžƒåœ¾æ”¶é›†æŠ€æœ¯ä»Žè¯žç”Ÿçš„那一天è“vž®×ƒ¸æ˜¯ä¸€¿U曲高和寡的“å¦é™¢‹z?#8221;技术ã€?
对于我们熟悉çš?C å’?C++ è¯è¨€åQŒåžƒåœ¾æ”¶é›†æŠ€æœ¯ä¸€æ ·å¯ä»¥å‘挥巨大的功效。æ£å¦‚æˆ‘ä»¬åœ¨å¦æ ¡ä¸å°±å·²ç»çŸ¥é“çš„é‚£æ øP¼Œ C å’?C++ è¯è¨€æœ¬èínòq¶æ²¡æœ‰æä¾›åžƒåœ¾æ”¶é›†æœºåˆÓž¼Œä½†è¿™òq¶ä¸å¦¨ç¢æˆ‘们在程åºä¸ä½¿ç”¨å…ähœ‰åžƒåœ¾æ”‰™›†åŠŸèƒ½çš„å‡½æ•°åº“æˆ–ç±»åº“ã€‚ä¾‹å¦‚ï¼Œæ—©åœ¨ 1988 òqß_¼Œ H. J. Boehm å’?A. J. Demers ž®±æˆåŠŸåœ°å®žçŽ°äº†ä¸€¿Uä‹É用ä¿å®ˆåžƒåœ¾æ”¶é›†ç®—法( Conservative GC Algorithmic åQ‰çš„函数库(å‚è§ http://www.hpl.hp.com/personal/Hans_Boehm/gc åQ‰ã€‚我们å¯ä»¥åœ¨ C è¯è¨€æˆ?C++ è¯è¨€ä¸ä‹É用该函数库完æˆè‡ªåŠ¨åžƒåœ¾æ”¶é›†åŠŸèƒ½ï¼Œå¿…è¦æ—Óž¼Œç”šè‡³˜q˜å¯ä»¥è®©ä¼ 统çš?C/C++ 代ç 与ä‹É用自动垃圾收集功能的 C/C++ 代ç 在一个程åºé‡ŒååŒå·¥ä½œã€?
1995 òq´è¯žç”Ÿçš„ Java è¯è¨€åœ¨ä¸€å¤œä¹‹é—´å°†åžƒåœ¾æ”‰™›†æŠ€æœ¯å˜æˆäº†è½¯äšgå¼€å‘领域里最为æµè¡Œçš„æŠ€æœ¯ä¹‹ä¸€ã€‚从æŸç§è§’度è¯ß_¼Œæˆ‘们很难分清½I¶ç«Ÿæ˜?Java 从垃圾收集ä¸å—益åQŒè¿˜æ˜¯åžƒåœ¾æ”¶é›†æŠ€æœ¯æœ¬íw«å€?Java 的普åŠè€Œæ‰¬å。值得注æ„的是åQŒä¸åŒç‰ˆæœ¬çš„ Java 虚拟æœÞZ‹É用的垃圾攉™›†æœºåˆ¶òq¶ä¸å®Œå…¨ç›¸åŒåQ?Java 虚拟机其实也¾l过了一个从½Ž€å•åˆ°å¤æ‚çš„å‘展过½E‹ã€‚在 Java 虚拟机的 1.4.1 版ä¸åQŒäh们å¯ä»¥ä½“验到的垃圾收集算法就包括分代攉™›†ã€å¤åˆ¶æ”¶é›†ã€å¢žé‡æ”¶é›†ã€æ ‡è®ŽÍ¼æ•´ç†ã€åƈ行å¤åˆÓž¼ˆ Parallel Copying åQ‰ã€åƈ行清除( Parallel Scavenging åQ‰ã€åƈå‘( Concurrent åQ‰æ”¶é›†ç‰è®¸å¤š¿U, Java ½E‹åº˜qè¡Œé€Ÿåº¦çš„ä¸æ–æå‡åœ¨å¾ˆå¤§½E‹åº¦ä¸Šåº”该归功于垃圾攉™›†æŠ€æœ¯çš„å‘展与完善ã€?
ž®½ç®¡åކå²ä¸Šå·²¾l有许多包å«åžƒåœ¾æ”‰™›†æŠ€æœ¯çš„应用òq›_°å’Œæ“作系¾lŸå‡ºçŽŽÍ¼Œä½?Microsoft .NET å´æ˜¯½W¬ä¸€¿U真æ£å®žç”¨åŒ–çš„ã€åŒ…å«äº†åžƒåœ¾æ”‰™›†æœºåˆ¶çš„通用è¯è¨€˜q行环境。事实上åQ?.NET òq›_°ä¸Šçš„æ‰€æœ‰è¯a€åQŒåŒ…æ‹?C# ã€?Visual Basic .NET ã€?Visual C++ .NET ã€?J# ½{‰ç‰åQŒéƒ½å¯ä»¥é€šè¿‡å‡ 乎完全相åŒçš„æ–¹å¼ä‹Éç”?.NET òq›_°æä¾›çš„垃圾收集机制。我们似乎å¯ä»¥æ–a€åQ?.NET 是垃圾收集技术在应用领域里的一‹Æ¡é‡å¤§å˜é©ï¼Œå®ƒä‹É垃圾攉™›†æŠ€æœ¯ä»Žä¸€¿U啾U¯çš„æŠ€æœ¯å˜æˆäº†åº”用环境乃至æ“作¾pÈ»Ÿä¸çš„一¿U内在文化。这¿Uå˜é©å¯¹æœªæ¥è½¯äšgå¼€å‘æŠ€æœ¯çš„å½±å“力也许覘qœè¿œ‘…过 .NET òq›_°æœ¬èín的商业äh倹{€?
-------------------------------------------------------------------------------------------------------
今天åQŒè‡´åŠ›äºŽåžƒåœ¾æ”‰™›†æŠ€æœ¯ç ”½I¶çš„äºÞZ»¬ä»åœ¨ä¸æ‡ˆåŠªåŠ›åQŒä»–ä»¬çš„ç ”ç©¶æ–¹å‘包括分布å¼ç³»¾lŸçš„垃圾攉™›†ã€å¤æ‚äº‹åŠ¡çŽ¯å¢ƒä¸‹çš„åžƒåœ¾æ”¶é›†ã€æ•°æ®åº“½{‰ç‰¹å®šç³»¾lŸçš„垃圾攉™›†½{‰ç‰ã€?
但在½E‹åºå‘˜ä¸é—ß_¼Œä»æœ‰ä¸å°‘人对垃圾攉™›†æŠ€æœ¯ä¸å±‘一™å¾ï¼Œä»–们宿„¿ç›æ€¿¡è‡ªå·±é€è¡Œ¾~–写çš?free æˆ?delete 命ä×oåQŒä¹Ÿä¸æ„¿æŠŠåžƒåœ¾æ”¶é›†çš„é‡ä“Qäº¤ç»™é‚£äº›åœ¨ä»–ä»¬çœ‹æ¥æ—¢è ¢åˆ½W¨çš„垃圾攉™›†å™¨ã€?
æˆ‘ä¸ªäºø™®¤ä¸ºï¼Œåžƒåœ¾æ”‰™›†æŠ€æœ¯çš„æ™®åŠæ˜¯å¤§åŠ¿æ‰€‘‹ï¼Œ˜q™å°±åƒç”Ÿ‹zÖM¼š‘Šæ¥‘Šå¥½ä¸€æ äh¯‹åº¸ç½®ç–‘。今天的½E‹åºå‘˜ä¹Ÿè®æ€¼šå› äØ“åžƒåœ¾æ”‰™›†å™¨è¦å 用一定的 CPU 资æºè€Œå¯¹å…¶æœ›è€Œå´æ¥ï¼Œä½†äºŒå多òq´å‰çš„程åºå‘˜˜q˜æ›¾å› äØ“é«˜çñ”è¯è¨€é€Ÿåº¦å¤ªæ…¢è€ŒåšæŒç”¨æœºå™¨è¯è¨€å†™ç¨‹åºå‘¢åQ在¼‹¬äšg速度日新月异的今天,我们是è¦å惜那一点儿旉™—´æŸè€—而踟íw‡ä¸å‰ï¼Œ˜q˜æ˜¯è¯¥åšå®šä¸¿UÕdœ°ç«™åœ¨ä»£ç å’Œè¿è¡ŒçŽ¯å¢ƒçš„å‡€åŒ–å‰‚â€”â€”åžƒåœ¾æ”¶é›†çš„ä¸€è¾¹å‘¢åQ?
本文ä¸ï¼Œæˆ‘将针对˜q™äº›çœ‹ä¼¼æ€ªå¼‚的最佛_®žè·µé˜˜q°æˆ‘的观点,òq¶ç®€˜q°æˆ‘对实施这些最佛_®žè·ëŠš„一些æ€è€ƒã€?/font>
一ã€è®¡åˆ’游æˆ?/font>
能够把计划å«å?#8220;游戔是需è¦ä¸€å®šå‹‡æ°”çš„ã€‚åœ¨ä¼ ç»Ÿçš„èÊY件开呿–¹æ³•å¦ä¸ï¼Œè®¡åˆ’是ä‹D‘Œ™½»é‡çš„一环,在制订计划å‰éœ€è¦ä»”¾l†çš„ä¼°ç®—åQŒåœ¨è®¡åˆ’实施的过½E‹ä¸åQŒè¿˜è¦ä¸åœçš„跟踪ã€ä¿®æ£ï¼Œç›´è‡³æ•´ä¸ª™å¹ç›®å®Œæˆã€?/font>
而在XPä¸ï¼Œè®¡åˆ’ä¼ég¹Žè¦è½»æ¾è®¸å¤šã€‚è¿™òq¶ä¸æ˜¯å› 䏸™®¡åˆ’本íw«å˜å¾—è‰çŽ‡å’Œæ— å…³ç—›ç—’åQŒè€Œæ˜¯å¾—益于XPçš„å°ç‰ˆæœ¬å‘布æ€ç»´ã€‚èÊY件的一个版本是如æ¤çŸå°½Ž€å•,以至于对它进行完整的评估ã€é¢„½Ž—ã€è·Ÿítªå’Œä¿®æ£è¦å®¹æ˜“许多。事实上åQŒXPä¸é‡‡ç”¨çš„计划方å¼åQˆä¸šåŠ¡äh员和开å‘äh员共åŒå‚与,å„å¸å…¶èŒåQ‰åœ¨å¤§å¤šæ•°çް代èÊYä»¶ä¼ä¸šä¸æ—©å·²é‡‡ç”¨åQŒä½†æ˜¯ç”±äºŽé¡¹ç›®è¿‡äºŽåºžå¤§ï¼Œå¾ˆéš¾åœ¨å¼€å§‹é˜¶ŒDµåˆ¶è®¢å‡ºå®Œå–„的计划。而在XPä¸ï¼ŒäºÞZ»¬åªéœ€è¦é’ˆå¯¹ä¸€ä¸ªä¸€ä¸¤ä¸ªæœˆçš„ž®é¡¹ç›®è¿›è¡Œè·Ÿítªå’Œ½Ž¡ç†åQŒæ— å½¢ä¸é™ä½Žäº†è®¡åˆ’的风险ã€?/font>
二ã€éšå–?/font>
在XPä¸ï¼ŒäºÞZ»¬¾l常会ä‹É用éšå–ÀL¥ä»£æ›¿ä¼ 统开å‘过½E‹ä¸çš„体¾pÈ»“构设计。从指导开å‘的角度æ¥è¯´åQŒéšå–ÖM¼¼ä¹Žä¸å¤Ÿç²¾¼‹®ï¼Œå®ÒŽ˜“让äh误解。但是,对于å…ähœ‰¾cÖM¼¼èƒŒæ™¯çš„åŒä¸€ä¸ªé¡¹ç›®ç»„ä¸çš„å¼€å‘äh员æ¥è¯ß_¼Œéšå–»åˆ™æ›´ä¾¿äºŽç†è§£å’Œäº¤‹¹ã€‚很难想象两个程åºå‘˜é¢å¯¹ç€ä¸€å¼ 庞大的体系¾l“æž„å›¾æ—¶èƒ½å¤ŸçœŸæ£æœ‰æ•ˆçš„æ²Ÿé€šï¼Œè€Œéšå–Õd¾ˆå¥½çš„解决了这个问题ã€?/font>
三ã€ç®€å•设è®?/font>
ä¸çŸ¥é“从什么时候开始,开å‘ähå‘˜ä¹ æƒ¯äº†ä¸ºæ˜Žå¤©è€Œè®¾è®¡ã€‚ä¸€ä¸ªå¼€å‘ähå‘˜è®¾è®¡äº†ä¸€ä¸ªå¤æ‚çš„¾cÈ‘ôæ‰¿ç»“æž„ï¼Œåªæ˜¯ä¸ÞZº†æé«˜½E‹åºçš„æ‰€è°“絋zÀL€§ã€‚没人知é“è¿™æ ·å€ég¸å€û|¼Œòq¶ä¸æ˜¯èÊYä»¶çš„æ¯ä¸€ä¸ªéƒ¨åˆ†éƒ½éœ€è¦æ‰©å±•ã€‚ä½†æ˜¯ï¼Œå¯¹äºŽä¼ ç»Ÿçš„èÊYä»¶å¼€å‘äh员æ¥è¯ß_¼Œ˜q™ä¹ˆåšåˆæ˜¯è¿«ä¸å¾—巌Ӏ‚如果没有预先åšå¥½å‡†å¤‡ï¼Œåœ¨å˜åŒ–æ¥ä¸´æ—¶ž®×ƒ¼šæŽªæ‰‹ä¸åŠåQŒä»˜å‡ºæ²‰é‡çš„代ähã€?/font>
但是在XPä¸ï¼Œž®ç‰ˆæœ¬å‘行的æ–ÒŽ³•使得å˜åŒ–òq¶ä¸é‚£ä¹ˆå¯æ€•ï¼Œè€Œé‡æž„çš„òq¿æ³›é‡‡ç”¨åQŒä‹Éå¾—ä»£ç æ€ÀL˜¯å¯ä»¥åœ¨éœ€è¦æ—¶å˜å¾—æ›´åŠ ç‰|´»ã€‚æ¤å¤–,ç”׃ºŽä½ çš„ä»£ç æ€ÀL˜¯ä¼šè¢«åˆ«äh审查åQˆä»£ç 集体所有æƒå’Œç»“对编½E‹ï¼‰åQŒå› æ¤ä¹Ÿå¯ä»¥é¿å…˜q‡äºŽ˜q½æ±‚½Ž€å•而忽视了é‡è¦çš„细节ã€?/font>
å››ã€æµ‹è¯•优å…?/font>
没有代ç è¦æµ‹è¯•ç¨‹åºæœ‰ä»€ä¹ˆç”¨åQŸè¿™æ˜¯æµ‹è¯•优先最å®ÒŽ˜“让äh误解的地æ–V€‚测试优先能够让开å‘äh员更清楚的认识到åQŒç¨‹åºå°†ä¼šå¦‚何被使用。通过对ä¸åŒçš„‹¹‹è¯•用例的æ€è€ƒï¼Œå¼€å‘äh员也能够更清晰的认识到程åºçš„功能外åšg。而更多的其他的开å‘äh员,则通过‹¹‹è¯•用例ž®±å¯ä»¥èŽ·å¾—ä¸€ä»½ç²¾¼‹®çš„使用手册åQŒåœ¨˜q™ä†¾ä½¿ç”¨æ‰‹å†Œä¸ï¼Œæè¿°äº†ä½œè€…考虑到的所有输入和输出¾l“æžœåQŒè¿™æ ·ä¸ä»…便于äh们了解程åºï¼Œæ›´å¢žåŠ äº†å‘现½E‹åºé”™è¯¯çš„æœºä¼šï¼ˆ¾~ºå¤±çš„æµ‹è¯•用例往往体现å‡ÞZ½œè€…忽视的æŸäº›ä½¿ç”¨æƒ…况åQ‰ã€?/font>
五ã€ç»“对编½E?/font>
两个½E‹åºå‘˜ååœ¨ä¸€èµøP¼Œèƒ½å¤Ÿæé«˜å¼€å‘效率å—åQŸç¨‹åºå‘˜éšùN“䏿˜¯ä¸€¾Ÿ¤é«˜å‚²çš„çŒ«ï¼Œä¹ æƒ¯äºŽç¦»¾Ÿ¤çƒ¦å±…,把头抬得高高å—?
事实òq‰™žå¦‚æ¤ã€‚在一个棼‹®çš„ã€åˆç†çš„ã€èƒ½å¤Ÿå®žçŽ°çš„å¤§ç›®æ ‡ä¸‹åQŒç¨‹åºå‘˜ä»¬ä¸ä»…能够和òq›_…±å¤„,更å¯ä»¥ç›¸äº’åˆä½œï¼Œåˆ›é€ 出优秀的ã€é«˜è´¨é‡çš„程åºã€‚沟通一直是软äšg™å¹ç›®½Ž¡ç†ä¸çš„一个é‡è¦è®®é¢˜ï¼Œè€Œç»“对编½E‹æä¾›äº†ä¸€ä¸ªååˆ†æœ‰æ•ˆçš„æ²Ÿé€šæ¸ é“。æ¤å¤–,¾l“对¾~–程也更å®ÒŽ˜“è®©æ–°äºø™žå…¥å›¢ä½“ã€‚åœ¨å‡ ä¸ªé«˜çñ”½E‹åºå‘˜çš„æŒ‡å¼•下,他会更容易找出程åºçš„脉络åQŒæŠŠæ¡ç¨‹åºçš„æ€æƒ³ã€‚è¾ƒä¹‹æ£è§„的培è®åQŒè¿™¿Uæ–¹å¼æ›´è½ÀL¾ä¹Ÿæ›´æœ‰æ•ˆã€‚对于团队ä¸çš„æ‰€æœ‰ç¨‹åºå‘˜æ¥è¯´åQŒç»“对编½E‹éƒ½æ˜¯ä¸€ä¸ªäº†è§£å…¶ä»–ähè®¾è®¡æ€æƒ³çš„æœºä¼šï¼Œé€šè¿‡¾l“对¾~–程åQŒèƒ½å¤Ÿæ›´å¥½çš„实现代ç 集体所有æƒåQŒä¹Ÿèƒ½å¤Ÿé™ä½Žå› äØ“äººå‘˜‹¹åŠ¨é€ æˆçš„风险ã€?/font>
¾l“对¾~–程最大的好处在于åQŒèƒ½å¤Ÿæžå¤§çš„å‡å°‘½E‹åºä¸æ½œåœ¨å˜åŒ–çš„å¯èƒ½æ€§ã€‚两个äh通过交æµäº’相交æ¢è‡ªå·±å¯¹ç¨‹åºçš„ä¸åŒç†è§£åQŒæ›´å®ÒŽ˜“扑ևº½E‹åºä¸å¯èƒ½å‡ºçŽ°çš„å˜åŒ–或错误,从而ä‹É½E‹åºæ›´åŠ å¯é å’Œå¥å£®ã€?/font>
å…ã€æŒ¾l集æˆ?/font>
集æˆä¸€ç›´æ˜¯æœ€è´¹åŠ›çš„å·¥ä½œä¹‹ä¸€åQŒæœ¬æ¥å·¥ä½œçš„好好的代ç ,攑֜¨ä¸€èµ·å°±ä¸èƒ½˜qè{åQŒæ›´¾pŸç³•的是æˆç™¾ä¸Šåƒæ¡ä¸çŸ¥æ‰€äº‘的错误ç ,没有人知é“è¿™äº›é”™è¯¯ç æ¥è‡ªä½•处。这是æ¯ä¸ªé¡¹ç›®å‡ 乎都会é‡åˆ°çš„æœ€å›°éš¾çš„阶ŒDµï¼Œ½E‹åºå‘˜ä»¬å¿…须集åˆåœ¨ä¸€èµøP¼Œ¾˜»é˜…æ•°é‡å·¨å¤§çš„æŽ¥å£å®šä¹‰æ–‡ä»Óž¼Œå夿Ÿ¥çœ‹ä»£ç åQŒåŒæ—¶è¿˜è¦ä¸æ–çš„åšå‡ºæ‰¿è¯ºã€?/font>
æŒç®‹é›†æˆæ£æ˜¯è§£å†³ä¸Šè¿°é—®é¢˜çš„æ–¹æ³•。通过多次ã€å°å¢žé‡çš„集æˆï¼Œæˆ‘们æ€ÀL˜¯èƒ½å¤Ÿä»¥æœ€å¿«çš„速度定ä½é”™è¯¯å‡ºçŽ°çš„ä½¾|®ï¼ˆå› äØ“å¢žåŠ çš„ä»£ç 很ž®‘)åQŒç»“åˆå¤§é‡æµ‹è¯•用例,我们也å¯ä»¥ç¡®ä¿æ¯ä¸€ä¸ªé›†æˆç‰ˆæœ¬éƒ½ž®½å¯èƒ½çš„å¯é ã€?/font>
æ¤å¤–åQŒæŒ¾l集æˆå‡ 乎å¯ä»¥åœ¨ä»ÖM½•æ—‰™—´å‘我们æä¾›ä¸€ä¸ªå¯ä»¥å·¥ä½œçš„版本åQŒæˆ‘们å¯ä»¥å°†˜q™ä¸ªç‰ˆæœ¬ç”¨äºŽå†…部讨论和测试ã€å®¢æˆ·å±•½Cºã€å®¢æˆähµ‹è¯•ã€å°ç‰ˆæœ¬å‘布½{‰ç‰åQŒè¿™ä½¿å¾—我们ä¸éœ€è¦èŠ±è´¹å¤ªå¤šçš„æ—‰™—´å¯¹çŽ°æœ‰çš„½E‹åºä¿®ä¿®è¡¥è¡¥åQŒä»¥ç”Ÿæˆä¸€ä¸ªdemoã€?/font>
上文½Ž€å•噘qîCº†XPä¸å¸¸ä¼šå¼•起争议的å…个最佛_®žè·ëŠš„ä¼˜ç‚¹ã€‚ä¸‹é¢æœ¬æ–‡å°†¾l“åˆå®žé™…谈谈实施XPä¸éœ€è¦æ³¨æ„的一些问题ã€?/font>
一ã€é€‚用性问é¢?/font>
XPç†è®ºåœ¨æå‡ºæ—¶åQŒæ˜Ž¼‹®çš„说明åQšXP是适用于丞®åž‹å›¢é˜Ÿåœ¨éœ€æ±‚䏿˜Žç¡®æˆ–者迅速å˜åŒ–的情况下进行èÊYä»¶å¼€å‘的轻釾U§æ–¹æ³•。这ž®±æ„味ç€åQŒXPòq¶ä¸é€‚用于所有情å†üc€‚在准备实施XPå‰ï¼Œä½ 也讔Rœ€è¦ä»”¾l†è¯„估项目的具体情况åQŒä»¥å†›_®šæ˜¯å¦çœŸçš„需è¦é‡‡ç”¨XPã€?/font>
äºŒã€æœ€ä½›_®žè·µé—´çš„å…³è?/font>
XP的一个特ç‚ÒŽ˜¯åQŒå®ƒæ‰€æŽ¨å´‡çš„æœ€ä½›_®žè·µå‡ 乎æ€ÀL˜¯å’Œå…¶å®ƒå®žè·µå…³è”紧密,在实施一™åÒŽœ€ä½›_®žè·‰|—¶åQŒå¦‚æžœä¸åŒæ—¶å®žæ–½å…¶å®ƒå®žè·µåQŒå¾€å¾€éš¾ä»¥è¾‘Öˆ°æœ€åˆçš„ç›®çš„ã€‚å› æ¤ï¼Œåœ¨å®žæ–½XPæ—Óž¼Œéœ€è¦ä»”¾l†ç ”½I¶å„™å¹å®žè·µé—´çš„å…³è”,以确定最佳的实施æ–ÒŽ¡ˆã€?/font>
三ã€å®½æ„¡š„环境
XP是一¿U追求自然的工作æ–ÒŽ³•。它所倡导的是åQŒç¨‹åºå‘˜ä»¬ä»¥æœ€è‡ªç„¶å¼€å‘的方å¼å®Œæˆä»–ä»¬çš„å·¥ä½œã€‚å¯¹äºŽä¹ æƒ¯äº†ä¼ ç»Ÿå¼€å‘æ–¹æ³•ä¸¥æ ¼ç®¡ç†åˆ¶åº¦çš„½Ž¡ç†äººå‘˜æ¥è¯´åQŒè¿™å¾€å¾€æ˜¯å¾ˆéš¾æŽ¥å—的。于是就出现了,虽然最高决½{–äh军_®šå®žæ–½XPåQŒä½†½Ž¡ç†å±‚å´æ— 法åQˆæˆ–䏿„¿åQ‰ç»™å¼€å‘äh员æä¾›å®½æ„¡š„çŽ¯å¢ƒã€‚åœ¨ä¸€ä¸ªå¤æ¿åƒµåŒ–çš„æ–ÒŽ¡†é‡Œï¼Œå¼€å‘äh员ä¸ä¼šçœŸæ£çš„回å¤è‡ªç„¶åQŒä»–们会装作æ£åœ¨å®žè·µXPåQŒä½†äº‹å®žä¸Šï¼Œä»–们ä¾ç„¶åœ¨è€èµ\上行赎ͼˆå¯ä»¥è§åˆ°å¾ˆå¤š˜q™æ ·çš„例åï¼Œæ¯”å¦‚ä¸€äº›è™šå¼ å£°åŠ¿çš„‹¹‹è¯•用例½{‰ç‰åQ‰ã€?/font>
å››ã€å¿å—å˜åŒ?/font>
XPå¯¹äºŽä¼ ç»Ÿè½¯äšg™å¹ç›®½Ž¡ç†æ€æƒ³çš„冲击,å¯èƒ½ä¼šä‹É很多½Ž¡ç†äººå‘˜æ„Ÿåˆ°ä¸èˆ’æœã€‚也许XP一¾l实施,ž®×ƒ¼š¾l™é¡¹ç›®ç»„带楾˜Õd¤©è¦†åœ°çš„å˜åŒ–。如果这æ ïLš„å˜åŒ–è®©ä½ æ„Ÿåˆ°ææƒ§åQŒé‚£ä¹ˆè¯·æš‚æ—¶å¿è€ï¼Œä½ ä¸èƒ½è‚¯å®šè¿™¿Uå˜åŒ–ä¸å¥½ï¼Œé™¤éžä½ 亲眼看到。到那时å†å†³å®šä¹Ÿä¸è¿Ÿã€?/font>
äº”ã€æ…¢æ…¢æ¥
实施XP的过½E‹ä¸èƒ½æ“之过急。最好的æ–ÒŽ³•是,在部分项目组ä¸å…ˆè¡Œå®žæ–½ï¼Œå®žæ–½æ—¶ä¹Ÿä¸éœ€è¦åŒæ—¶å®žæ–½æ‰€æœ‰å®žè·µï¼ˆä½†è¦æ³¨æ„å„个实践间的兌™”问题åQ‰ã€‚æœ‰çš„æ—¶å€™ä½ ä¼šå‘玎ͼŒåœ¨å®žæ–½äº†éƒ¨åˆ†å®žè·µåŽï¼Œå…¶å®ƒçš„实践也æˆäØ“æ°´åˆ°æ¸ æˆçš„事情。当¾l过仔细评估åQŒç¡®ä¿¡XP在项目组ä¸ç¡®å®žæœ‰æ•ˆåŽåQŒå†é€æ¥åœ¨ä¼ä¸šèŒƒå›´å†…推广åQŒå¿…è¦çš„æ—¶å€™ï¼Œéœ€è¦é‡‡å–自愿的原则åQŒç”±™å¹ç›®¾l„çš„æˆå‘˜å†›_®šæ˜¯å¦éœ€è¦å®žæ–½XPã€?/font>
以上åÏx˜¯æˆ‘在软äšg工程˜q‡ç¨‹è¯„¡¨‹ä¸ä»¥åŠåã^时工作ã€å¦ä¹ ä¸å¯¹XP的一些认识ã€?/font>
æ¥æºåQ?/font> http://blog.csdn.net/leasun/archive/2006/08/15/1067508.aspx