ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>久久亚洲精品国产精品,久久夜色精品国产网站,人妻少妇久久中文字幕http://www.shnenglu.com/majianan/archive/2006/11/04/14666.html马嘉æ¥?/dc:creator>马嘉æ¥?/author>Sat, 04 Nov 2006 08:19:00 GMThttp://www.shnenglu.com/majianan/archive/2006/11/04/14666.htmlhttp://www.shnenglu.com/majianan/comments/14666.htmlhttp://www.shnenglu.com/majianan/archive/2006/11/04/14666.html#Feedback2http://www.shnenglu.com/majianan/comments/commentRss/14666.htmlhttp://www.shnenglu.com/majianan/services/trackbacks/14666.html                                            垃圾攉™›†­‘£å²åQˆè{åQ?/font>

                                                     王å’刚,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;的算法,它们的æ“ä½œå¯¹è±¡æ—¢ä¸æ˜¯é™æ€å˜é‡ï¼Œä¹Ÿä¸æ˜¯å±€éƒ¨å˜é‡ï¼Œè€Œæ˜¯å †ä¸­æ‰€æœ‰å·²åˆ†é…内存å—ã€?


 

引用计数åQ?Reference Counting åQ‰ç®—æ³?/font>

-------------------------------------------------------------------------------------------------------

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手ã€?

 

标记åQ清除( Mark-Sweep åQ‰ç®—æ³?/font>

-------------------------------------------------------------------------------------------------------

½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 语言上的æˆå°±äº†ã€?

 

å¤åˆ¶åQ?Copying åQ‰ç®—æ³?/font>

-------------------------------------------------------------------------------------------------------

ä¸Þ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æ•´ç†ï¼ˆ Mark-Compact åQ‰ç®—æ³?/font>

-------------------------------------------------------------------------------------------------------

标记å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›ç‰ˆæœ¬ã€?

 

å¢žé‡æ”‰™›†åQ?Incremental Collecting åQ‰ç®—æ³?/font>

-------------------------------------------------------------------------------------------------------

å¯¹å®žæ—¶åžƒåœ¾æ”¶é›†ç®—æ³•çš„ç ”ç©¶ç›´æŽ¥å¯Æ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º†ã€?

 

分代攉™›†åQ?Generational Collecting åQ‰ç®—æ³?/font>

-------------------------------------------------------------------------------------------------------

和大多数软äš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倹{€?

 

大势所­‘?/font>

-------------------------------------------------------------------------------------------------------

今天å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?



]]>
2006-10-28 技术网æ‘?/title><link>http://www.shnenglu.com/majianan/archive/2006/10/28/14303.html</link><dc:creator>马嘉æ¥?/dc:creator><author>马嘉æ¥?/author><pubDate>Sat, 28 Oct 2006 01:59:00 GMT</pubDate><guid>http://www.shnenglu.com/majianan/archive/2006/10/28/14303.html</guid><wfw:comment>http://www.shnenglu.com/majianan/comments/14303.html</wfw:comment><comments>http://www.shnenglu.com/majianan/archive/2006/10/28/14303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/majianan/comments/commentRss/14303.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/majianan/services/trackbacks/14303.html</trackback:ping><description><![CDATA[ <br /> <font face="Verdana" color="#0000ff"> <font color="#000080"> <strong>1.</strong> </font>   </font> <a class="" title="" target=""> <font face="Verdana" color="#0000ff">è§£æžC++/CLI之头文äšgã€å†…è”函æ•îC¸Žæ•°ç»„</font> </a> <br /> <br /> <font face="Verdana" color="#0000ff"> <font color="#000080"> <strong>2.</strong> </font>  </font> <a class="" title="" target=""> <font face="Verdana" color="#0000ff"> 解æžC++/CLI之头文äšgã€å†…è”函æ•îC¸Žæ•°ç»„(2)</font> </a> <br /> <br /> <font face="Verdana" color="#0000ff"> <font color="#000080"> <strong>3.</strong> </font>  </font> <a class="" title="" target=""> <font face="Verdana" color="#0000ff"> 解æžC++/CLI之头文äšgã€å†…è”函æ•îC¸Žæ•°ç»„(3)</font> </a> <br /> <br /> <font face="Verdana" color="#000080"> <strong>4.</strong>    <a class="" title="" target="">ä¿å«C++åQšå®‰å…¨STL¾~–ç¨‹ä¸­çš„å—æ£€˜q­ä»£å­?/a><br /><br /><strong>5.</strong>   </font> <img src ="http://www.shnenglu.com/majianan/aggbug/14303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/majianan/" target="_blank">马嘉æ¥?/a> 2006-10-28 09:59 <a href="http://www.shnenglu.com/majianan/archive/2006/10/28/14303.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>æžé™¾~–程――ç†è§£å’Œå®žè·µåQˆè{载)http://www.shnenglu.com/majianan/archive/2006/08/26/11728.html马嘉æ¥?/dc:creator>马嘉æ¥?/author>Sat, 26 Aug 2006 02:15:00 GMThttp://www.shnenglu.com/majianan/archive/2006/08/26/11728.htmlhttp://www.shnenglu.com/majianan/comments/11728.htmlhttp://www.shnenglu.com/majianan/archive/2006/08/26/11728.html#Feedback0http://www.shnenglu.com/majianan/comments/commentRss/11728.htmlhttp://www.shnenglu.com/majianan/services/trackbacks/11728.htmlä½œäØ“æ•æ·è½¯äšgå¼€å‘领域主‹¹çš„开呿–¹æ³•,æžé™¾~–程与其说是一¿Uç³»¾lŸçš„æ–ÒŽ³•å­¦ï¼Œå€’æ›´åƒæ˜¯ä¸€¾pÕdˆ—最佛_®žè·ëŠš„有机¾l“åˆã€‚在˜q™äº›æœ€ä½›_®žè·µä¸­åQŒæœ‰äº›æ˜¯å·²ç»òq¿äØ“äºÞZ»¬æ‰€æŽ¥å—çš„ï¼ˆå¦‚ç¼–ç æ ‡å‡†ï¼‰åQŒè€Œæ›´å¤šçš„则æžå…·é¢ è¦†æ€§ï¼Œåˆçœ‹ä¹‹ä¸‹è®©ähä¼ég¹Žéš¾ä»¥æŽ¥å—ã€?/font>

本文中,我将针对˜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



]]>
ÈËÆÞÎÞÂ뾫Ʒ¾Ã¾ÃÑÇɪӰÊÓ| 91¾«Æ·¹ú²ú×ÛºÏ¾Ã¾ÃæÃæÃ| ¾Ã¾Ã¾«Æ·¹ú²ú99¹ú²ú¾«Æ·| Æ·³ÉÈËÅ·ÃÀ´óƬ¾Ã¾Ã¹ú²úÅ·ÃÀ| ¾Ã¾Ã¾Ãàààààà¾Ã¾Ã| ÈÕ±¾Ç¿ºÃƬ¾Ã¾Ã¾Ã¾Ã¾ÃAAA| ÇàÇà²Ý¹ú²ú¾«Æ·¾Ã¾Ã¾Ã¾Ã| ¾Ã¾Ã¾Ã99¾«Æ·³ÉÈËÆ¬ÖÐÎÄ×ÖÄ»| ˼˼¾Ã¾Ã99ÈÈÃâ·Ñ¾«Æ·6| ¹úÄÚ¾«Æ·¾Ã¾Ã¾Ã¾Ã¾Ã99ÃÛÌÒ| ¹ú²ú¾«Æ·Ãâ·Ñ¾Ã¾Ã¾Ã¾ÃÓ°Ôº| ¾Ã¾Ã¾Ã¾Ã²¨¶àÒ°½áÒ¸߳±| ¾Ã¾ÃÑÇÖÞÅ·ÃÀÈÕ±¾¾«Æ·| ¹úÉ«ÌìÏã¾Ã¾Ã¾Ã¾Ã¾Ã¾ÃС˵| ¹ú²ú¾«Æ·ÊìÅ®¸£Àû¾Ã¾ÃAV| ¾Ã¾Ã¾«Æ·ÎÞÂë×¨ÇøÃâ·Ñ¶«¾©ÈÈ| ¹ú²ú³ÉÈ˾«Æ·¾Ã¾Ã| ¹ú²ú¾«Æ·¾Ã¾Ã×ÔÔÚ×ÔÏß¹Û¿´| ÎçÒ¹¾«Æ·¾Ã¾Ã¾Ã¾Ã³ÉÈË| ÈÕ±¾¾Ã¾Ã¾Ã¾Ã¾ÃÖÐÎÄ×ÖÄ»| ÑÇÖÞÖÐÎÄ×ÖÄ»¾Ã¾Ã¾«Æ·ÎÞÂëÅçË® | 99¾Ã¾Ã¹ú²ú×ۺϾ«Æ·Íø³ÉÈËÓ°Ôº| ¾Ã¾Ã¾«Æ·×ÛºÏÍø| ¾Ã¾Ã¹ú²ú¸£ÀûÃâ·Ñ| ÑÇÖÞ¹ú²ú¾«Æ·È˾þÃ| ¾Ã¾Ã¾Ãàààààà¾Ã¾ÃÊìÅ®AAƬ| ÑÇÖÞ¹ú²úÊÓÆµ¾Ã¾Ã| É«8¼¤ÇéÅ·ÃÀ³ÉÈ˾þÃ×ۺϵç| ÀÏ˾»ú¹úÄÚ¾«Æ·¾Ã¾Ã¾Ã¾Ã| ¹ú²ú¾«Æ·¾Ã¾Ã¾Ã¾ÃAV¸£Àû¶¯Âþ | ÑÇÖÞÎçÒ¹ÎÞÂë¾Ã¾Ã¾Ã¾Ã| ¾Ã¾Ã¾ÃÊÜwwwÃâ·ÑÈ˳É| ¾«Æ·ÎÞÂë¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã¾Ã| ¾Ã¾Ã¾Ã¾«Æ·Ãâ·Ñ¹ú²úËÄ»¢| AºÝºÝ¾Ã¾ÃÃÛÍÎæÃÉ«ÖÐÎÄÍø| ¹ú²ú¾«Æ·¾Ã¾Ã¾Ã¾ÃÃÛÑ¿| ¾Ã¾Ã¾Ã¾Ã¾Ã¹ú²ú¾«Æ·ÎÞÂëÏÂÔØ| ¾Ã¾Ã¾Ã¾Ã¾Ã¾«Æ·Ãâ·Ñ¿´SSS| ÀÇÀÇ×ۺϾþþþÃ×ÛºÏÍø| ¾Ã¾Ã¾«Æ·99¾Ã¾ÃÏã½¶¹ú²úÉ«½ä | ¾Ã¾Ã¸¾Å®¸ß³±¼¸´ÎMBA|