Õ¾ÄÚËÑË÷: ÇëÊäÈëËÑË÷¹Ø¼ü´Ê

µ±Ç°Ò³Ãæ: ¿ª·¢×ÊÁÏÊ×Ò³ ¡ú Java רÌâ ¡ú ÉîÈëdz³öJava¶ÑµÄ¹ÜÀí--À¬»ø»ØÊÕ

ÉîÈëdz³öJava¶ÑµÄ¹ÜÀí--À¬»ø»ØÊÕ

ÕªÒª: JavaµÄ¶ÑÊÇÒ»¸öÔËÐÐʱÊý¾ÝÇø,ÀàµÄʵÀý(¶ÔÏó)´ÓÖзÖÅä¿Õ¼ä
¡¡¡¡ÒýÑÔ

¡¡¡¡JavaµÄ¶ÑÊÇÒ»¸öÔËÐÐʱÊý¾ÝÇø,ÀàµÄʵÀý(¶ÔÏó)´ÓÖзÖÅä¿Õ¼ä¡£JavaÐéÄâ»ú(JVM)µÄ¶ÑÖд¢´æ×ÅÕýÔÚÔËÐеÄÓ¦ÓóÌÐòËù½¨Á¢µÄËùÓжÔÏó£¬ÕâЩ¶ÔÏóͨ¹ýnew¡¢newarray¡¢anewarrayºÍmultianewarrayµÈÖ¸ÁÁ¢£¬µ«ÊÇËüÃDz»ÐèÒª³ÌÐò´úÂëÀ´ÏÔʽµØÊÍ·Å¡£Ò»°ãÀ´Ëµ£¬¶ÑµÄÊÇÓÉÀ¬»ø»ØÊÕ À´¸ºÔðµÄ£¬¾¡¹ÜJVM¹æ·¶²¢²»ÒªÇóÌØÊâµÄÀ¬»ø»ØÊÕ¼¼Êõ£¬ÉõÖÁ¸ù±¾¾Í²»ÐèÒªÀ¬»ø»ØÊÕ£¬µ«ÊÇÓÉÓÚÄÚ´æµÄÓÐÏÞÐÔ£¬JVMÔÚʵÏÖµÄʱºò¶¼ÓÐÒ»¸öÓÉÀ¬»ø»ØÊÕËù¹ÜÀíµÄ¶Ñ¡£À¬»ø»ØÊÕÊÇÒ»ÖÖ¶¯Ì¬´æ´¢¹ÜÀí¼¼Êõ£¬Ëü×Ô¶¯µØÊͷŲ»ÔÙ±»³ÌÐòÒýÓõĶÔÏ󣬰´ÕÕÌض¨µÄÀ¬»øÊÕ¼¯Ëã·¨À´ÊµÏÖ×ÊÔ´×Ô¶¯»ØÊյŦÄÜ¡£

¡¡¡¡À¬»øÊÕ¼¯µÄÒâÒå

¡¡¡¡ÔÚC++ÖУ¬¶ÔÏóËùÕ¼µÄÄÚ´æÔÚ³ÌÐò½áÊøÔËÐÐ֮ǰһֱ±»Õ¼Óã¬ÔÚÃ÷È·ÊÍ·Å֮ǰ²»ÄÜ·ÖÅä¸øÆäËü¶ÔÏ󣻶øÔÚJavaÖУ¬µ±Ã»ÓжÔÏóÒýÓÃÖ¸ÏòÔ­ÏÈ·ÖÅä¸øij¸ö¶ÔÏóµÄÄÚ´æʱ£¬¸ÃÄÚ´æ±ã³ÉΪÀ¬»ø¡£JVMµÄÒ»¸öϵͳ¼¶Ï̻߳á×Ô¶¯ÊͷŸÃÄÚ´æ¿é¡£À¬»øÊÕ¼¯Òâζ×ųÌÐò²»ÔÙÐèÒªµÄ¶ÔÏóÊÇ"ÎÞÓÃÐÅÏ¢"£¬ÕâЩÐÅÏ¢½«±»¶ªÆú¡£µ±Ò»¸ö¶ÔÏó²»ÔÙ±»ÒýÓõÄʱºò£¬ÄÚ´æ»ØÊÕËüÕ¼ÁìµÄ¿Õ¼ä£¬ÒÔ±ã¿Õ¼ä±»ºóÀ´µÄжÔÏóʹÓá£ÊÂʵÉÏ£¬³ýÁËÊÍ·ÅûÓõĶÔÏó£¬À¬»øÊÕ¼¯Ò²¿ÉÒÔÇå³ýÄÚ´æ¼Ç¼ËéƬ¡£ÓÉÓÚ´´½¨¶ÔÏóºÍÀ¬»øÊÕ¼¯Æ÷ÊͷŶªÆú¶ÔÏóËùÕ¼µÄÄÚ´æ¿Õ¼ä£¬ÄÚ´æ»á³öÏÖËéƬ¡£ËéƬÊÇ·ÖÅä¸ø¶ÔÏóµÄÄÚ´æ¿éÖ®¼äµÄ¿ÕÏÐÄڴ涴¡£ËéƬÕûÀí½«ËùÕ¼ÓõĶÑÄÚ´æÒƵ½¶ÑµÄÒ»¶Ë£¬JVM½«ÕûÀí³öµÄÄÚ´æ·ÖÅä¸øеĶÔÏó¡£

¡¡¡¡À¬»øÊÕ¼¯ÄÜ×Ô¶¯ÊÍ·ÅÄÚ´æ¿Õ¼ä£¬¼õÇá±à³ÌµÄ¸ºµ£¡£ÕâʹJava ÐéÄâ»ú¾ßÓÐһЩÓŵ㡣Ê×ÏÈ£¬ËüÄÜʹ±à³ÌЧÂÊÌá¸ß¡£ÔÚûÓÐÀ¬»øÊÕ¼¯»úÖƵÄʱºò£¬¿ÉÄÜÒª»¨Ðí¶àʱ¼äÀ´½â¾öÒ»¸öÄѶ®µÄ´æ´¢Æ÷ÎÊÌâ¡£ÔÚÓÃJavaÓïÑÔ±à³ÌµÄʱºò£¬¿¿À¬»øÊÕ¼¯»úÖÆ¿É´ó´óËõ¶Ìʱ¼ä¡£Æä´ÎÊÇËü±£»¤³ÌÐòµÄÍêÕûÐÔ, À¬»øÊÕ¼¯ÊÇJavaÓïÑÔ°²È«ÐÔ²ßÂÔµÄÒ»¸öÖØÒª²¿·Ý¡£

¡¡¡¡À¬»øÊÕ¼¯µÄÒ»¸öDZÔÚµÄȱµãÊÇËüµÄ¿ªÏúÓ°Ïì³ÌÐòÐÔÄÜ¡£JavaÐéÄâ»ú±ØÐë×·×ÙÔËÐгÌÐòÖÐÓÐÓõĶÔÏó, ¶øÇÒ×îÖÕÊÍ·ÅûÓõĶÔÏó¡£ÕâÒ»¸ö¹ý³ÌÐèÒª»¨·Ñ´¦ÀíÆ÷µÄʱ¼ä¡£Æä´ÎÀ¬»øÊÕ¼¯Ëã·¨µÄ²»Í걸ÐÔ£¬ÔçÏȲÉÓõÄijЩÀ¬»øÊÕ¼¯Ëã·¨¾Í²»Äܱ£Ö¤100%ÊÕ¼¯µ½ËùÓеķÏÆúÄÚ´æ¡£µ±È»Ëæ×ÅÀ¬»øÊÕ¼¯Ëã·¨µÄ²»¶Ï¸Ä½øÒÔ¼°ÈíÓ²¼þÔËÐÐЧÂʵIJ»¶ÏÌáÉý£¬ÕâЩÎÊÌⶼ¿ÉÒÔÓ­Èжø½â¡£

¡¡¡¡À¬»øÊÕ¼¯µÄËã·¨·ÖÎö

¡¡¡¡JavaÓïÑԹ淶ûÓÐÃ÷È·µØ˵Ã÷JVMʹÓÃÄÄÖÖÀ¬»ø»ØÊÕËã·¨£¬µ«ÊÇÈκÎÒ»ÖÖÀ¬»øÊÕ¼¯Ëã·¨Ò»°ãÒª×ö2¼þ»ù±¾µÄÊÂÇ飺£¨1£©·¢ÏÖÎÞÓÃÐÅÏ¢¶ÔÏ󣻣¨2£©»ØÊÕ±»ÎÞÓöÔÏóÕ¼ÓõÄÄÚ´æ¿Õ¼ä£¬Ê¹¸Ã¿Õ¼ä¿É±»³ÌÐòÔÙ´ÎʹÓá£

¡¡¡¡´ó¶àÊýÀ¬»ø» ØÊÕË㷨ʹÓÃÁ˸ù¼¯(root set)Õâ¸ö¸ÅÄËùν¸ù¼¯¾ÍÁ¿ÕýÔÚÖ´ÐеÄJava³ÌÐò¿ÉÒÔ·ÃÎʵÄÒýÓñäÁ¿µÄ¼¯ºÏ(°üÀ¨¾Ö²¿±äÁ¿¡¢²ÎÊý¡¢Àà±äÁ¿)£¬³ÌÐò¿ÉÒÔʹÓÃÒýÓñäÁ¿·ÃÎʶÔÏóµÄÊôÐԺ͵÷ÓöÔÏóµÄ·½·¨¡£À¬»øÊÕ¼¯Ê×Ñ¡ÐèҪȷ¶¨´Ó¸ù¿ªÊ¼ÄÄЩÊÇ¿É´ïµÄºÍÄÄЩÊDz»¿É´ïµÄ£¬´Ó¸ù¼¯¿É´ïµÄ¶ÔÏó¶¼Êǻ¶ÔÏó£¬ËüÃDz»ÄÜ×÷ΪÀ¬»ø±»»ØÊÕ£¬ÕâÒ²°üÀ¨´Ó¸ù¼¯¼ä½Ó¿É´ïµÄ¶ÔÏ󡣶ø¸ù¼¯Í¨¹ýÈÎÒâ·¾¶²»¿É´ïµÄ¶ÔÏó·ûºÏÀ¬»øÊÕ¼¯µÄÌõ¼þ£¬Ó¦¸Ã±»»ØÊÕ¡£ÏÂÃæ½éÉܼ¸¸ö³£ÓõÄËã·¨¡£

¡¡¡¡1¡¢ÒýÓüÆÊý·¨(Reference Counting Collector)

¡¡¡¡ÒýÓüÆÊý·¨ÊÇΨһûÓÐʹÓøù¼¯µÄÀ¬»ø»ØÊյ÷¨£¬¸ÃË㷨ʹÓÃÒýÓüÆÊýÆ÷À´Çø·Ö´æ»î¶ÔÏóºÍ²»ÔÙʹÓõĶÔÏó¡£Ò»°ãÀ´Ëµ£¬¶ÑÖеÄÿ¸ö¶ÔÏó¶ÔÓ¦Ò»¸öÒýÓüÆÊýÆ÷¡£µ±Ã¿Ò»´Î´´½¨Ò»¸ö¶ÔÏ󲢸³¸øÒ»¸ö±äÁ¿Ê±£¬ÒýÓüÆÊýÆ÷ÖÃΪ1¡£µ±¶ÔÏ󱻸³¸øÈÎÒâ±äÁ¿Ê±£¬ÒýÓüÆÊýÆ÷ÿ´Î¼Ó1¡£µ±¶ÔÏó³öÁË×÷ÓÃÓòºó(¸Ã¶ÔÏó¶ªÆú²»ÔÙʹÓÃ)£¬ÒýÓüÆÊýÆ÷¼õ1£¬Ò»µ©ÒýÓüÆÊýÆ÷Ϊ0£¬¶ÔÏó¾ÍÂú×ãÁËÀ¬»øÊÕ¼¯µÄÌõ¼þ¡£

¡¡¡¡»ùÓÚÒýÓüÆÊýÆ÷µÄÀ¬»øÊÕ¼¯Æ÷ÔËÐнϿ죬²»»á³¤Ê±¼äÖжϳÌÐòÖ´ÐУ¬ÊÊÒ˵رØÐë ʵʱÔËÐеijÌÐò¡£µ«ÒýÓüÆÊýÆ÷Ôö¼ÓÁ˳ÌÐòÖ´ÐеĿªÏú£¬ÒòΪÿ´Î¶ÔÏ󸳸øеıäÁ¿ £¬¼ÆÊýÆ÷¼Ó1£¬¶øÿ´ÎÏÖÓжÔÏó³öÁË×÷ÓÃÓòÉú£¬¼ÆÊýÆ÷¼õ1¡£

¡¡¡¡2¡¢tracingËã·¨(Tracing Collector)

¡¡¡¡tracingËã·¨ÊÇΪÁ˽â¾öÒýÓüÆÊý·¨µÄÎÊÌâ¶øÌá³ö£¬ËüʹÓÃÁ˸ù¼¯µÄ¸ÅÄî¡£»ùÓÚtracingËã·¨µÄÀ¬»øÊÕ¼¯Æ÷´Ó¸ù¼¯¿ªÊ¼É¨Ã裬ʶ±ð³öÄÄЩ¶ÔÏó¿É´ï£¬ÄÄЩ¶ÔÏ󲻿ɴ²¢ÓÃijÖÖ·½Ê½±ê¼Ç¿É´ï¶ÔÏó£¬ÀýÈç¶Ôÿ¸ö¿É´ï¶ÔÏóÉèÖÃÒ»¸ö»ò¶à¸öλ¡£ÔÚɨÃèʶ±ð¹ý³ÌÖУ¬»ùÓÚtracingËã·¨µÄÀ¬»øÊÕ¼¯Ò²³ÆΪ±ê¼ÇºÍÇå³ý(mark-and-sweep)À¬»øÊÕ¼¯Æ÷.

¡¡¡¡3¡¢compactingËã·¨(Compacting Collector)

¡¡¡¡ÎªÁ˽â¾ö¶ÑËéƬÎÊÌ⣬»ùÓÚtracingµÄÀ¬»ø»ØÊÕÎüÊÕÁËCompactingËã·¨µÄ˼Ï룬ÔÚÇå³ýµÄ¹ý³ÌÖУ¬Ëã·¨½«ËùÓеĶÔÏóÒƵ½¶ÑµÄÒ»¶Ë£¬¶ÑµÄÁíÒ»¶Ë¾Í±ä³ÉÁËÒ»¸öÏàÁڵĿÕÏÐÄÚ´æÇø£¬ÊÕ¼¯Æ÷»á¶ÔËüÒƶ¯µÄËùÓжÔÏóµÄËùÓÐÒýÓýøÐиüУ¬Ê¹µÃÕâЩÒýÓà ÔÚеÄλÖÃÄÜʶ±ðÔ­À´ µÄ¶ÔÏó¡£ÔÚ»ùÓÚCompactingËã·¨µÄÊÕ¼¯Æ÷µÄʵÏÖÖУ¬Ò»°ãÔö¼Ó¾ä±úºÍ¾ä±ú±í¡£

¡¡¡¡4¡¢copingËã·¨(Coping Collector)

¡¡¡¡¸ÃËã·¨µÄÌá³öÊÇΪÁË¿Ë·þ¾ä±úµÄ¿ªÏúºÍ½â¾ö¶ÑËéƬµÄÀ¬»ø»ØÊÕ¡£Ëü¿ªÊ¼Ê±°Ñ¶Ñ·Ö³É Ò»¸ö¶ÔÏó ÃæºÍ¶à¸ö¿ÕÏÐÃ棬 ³ÌÐò´Ó¶ÔÏóÃæΪ¶ÔÏó·ÖÅä¿Õ¼ä£¬µ±¶ÔÏóÂúÁË£¬»ùÓÚcopingËã·¨µÄÀ¬»ø ÊÕ¼¯¾Í´Ó¸ù¼¯ÖÐɨÃè»î¶¯¶ÔÏ󣬲¢½«Ã¿¸ö »î¶¯¶ÔÏó¸´ÖƵ½¿ÕÏÐÃæ(ʹµÃ»î¶¯¶ÔÏóËùÕ¼µÄÄÚ´æÖ®¼äûÓпÕÏж´)£¬ÕâÑ ù¿ÕÏÐÃæ±ä³ÉÁ˶ÔÏóÃ棬ԭÀ´µÄ¶ÔÏóÃæ±ä³ÉÁË¿ÕÏÐÃ棬³ÌÐò»áÔÚеĶÔÏóÃæÖзÖÅäÄÚ´æ¡£

¡¡¡¡Ò»ÖÖµäÐ͵ĻùÓÚcopingËã·¨µÄÀ¬»ø»ØÊÕÊÇstop-and-copyËã·¨£¬Ëü½«¶Ñ·Ö³É¶ÔÏóÃæºÍ¿ÕÏÐÇøÓòÃ棬ÔÚ¶ÔÏóÃæÓë¿ÕÏÐÇøÓòÃæµÄÇл»¹ý³ÌÖУ¬³ÌÐòÔÝÍ£Ö´ÐС£

¡¡¡¡5¡¢generationËã·¨(Generational Collector)

¡¡¡¡stop-and-copyÀ¬»øÊÕ¼¯Æ÷µÄÒ»¸öȱÏÝÊÇÊÕ¼¯Æ÷±ØÐ븴ÖÆËùÓеĻ¶ÔÏó£¬ÕâÔö¼ÓÁ˳ÌÐòµÈ´ýʱ¼ä£¬ÕâÊÇcopingËã·¨µÍЧµÄÔ­Òò¡£ÔÚ³ÌÐòÉè¼ÆÖÐÓÐÕâÑùµÄ¹æÂÉ£º¶àÊý¶ÔÏó´æÔÚµÄʱ¼ä±È½Ï¶Ì£¬ÉÙÊýµÄ´æÔÚʱ¼ä±È½Ï³¤¡£Òò´Ë£¬generationËã·¨½«¶Ñ·Ö³ÉÁ½¸ö»ò¶à¸ö£¬Ã¿¸ö×Ó¶Ñ×÷Ϊ¶ÔÏóµÄÒ»´ú(generation)¡£ÓÉÓÚ¶àÊý¶ÔÏó´æÔÚµÄʱ¼ä±È½Ï¶Ì£¬Ëæ×ųÌÐò¶ªÆú²»Ê¹ÓõĶÔÏó£¬À¬»øÊÕ¼¯Æ÷½«´Ó×îÄêÇáµÄ×Ó¶ÑÖÐÊÕ¼¯ÕâЩ¶ÔÏó¡£ÔÚ·Ö´úʽµÄÀ¬»øÊÕ¼¯Æ÷ÔËÐкó£¬ÉÏ´ÎÔËÐдæ»îÏÂÀ´µÄ¶ÔÏóÒƵ½ÏÂÒ»×î¸ß´úµÄ×Ó¶ÑÖУ¬ÓÉÓÚÀÏÒ»´úµÄ×ӶѲ»»á¾­³£±»»ØÊÕ£¬Òò¶ø½ÚÊ¡ÁËʱ¼ä¡£

¡¡¡¡6¡¢adaptiveËã·¨(Adaptive Collector)

¡¡¡¡ÔÚÌض¨µÄÇé¿öÏ£¬Ò»Ð©À¬»øÊÕ¼¯Ëã·¨»áÓÅÓÚÆäËüËã·¨¡£»ùÓÚAdaptiveËã·¨µÄÀ¬»øÊÕ¼¯Æ÷¾ÍÊǼà¿Øµ±Ç°¶ÑµÄʹÓÃÇé¿ö£¬²¢½«Ñ¡ÔñÊʵ±Ëã·¨µÄÀ¬»øÊÕ¼¯Æ÷¡£




¡ü·µ»ØĿ¼
ǰһƪ: Eclipse 3.0 ¼ò½éºÍ²å¼þ¿ª·¢Ê¾Àý
ºóһƪ: EJB 3.0¿ª·¢Ö¸ÄÏÖ®ÒÀÀµ×¢Èë