¶ÔÓÚJava¿ª·¢ÈËÔ±À´Ëµ£¬Á˽âÀ¬»ø»ØÊÕ»úÖÆ£¨GC£©ÓÐÄÄЩºÃ´¦ÄØ£¿Ê×ÏÈ¿ÉÒÔÂú×ã×÷ΪһÃûÈí¼þ¹¤³ÌʦµÄÇóÖªÓû£¬Æä´Î£¬ÉîÈëÁ˽âGCÈçºÎ¹¤×÷¿ÉÒÔ°ïÄãд³ö¸üºÃµÄJavaÓ¦Óá£
Õâ½ö½ö´ú±íÎÒ¸öÈ˵ÄÒâ¼û£¬µ«ÎÒ¼áÐÅÒ»¸ö¾«Í¨GCµÄÈËÍùÍùÊÇÒ»¸öºÃµÄJava¿ª·¢Õß¡£Èç¹ûÄã¶ÔGCµÄ´¦Àí¹ý³Ì¸ÐÐËȤ£¬ËµÃ÷ÄãÒѾ¾ß±¸½Ï´ó¹æÄ£Ó¦ÓõĿª·¢¾Ñé¡£Èç¹ûÄãÔø¾Ïë¹ýÈçºÎÕýÈ·µÄÑ¡ÔñGCËã·¨£¬ÄÇÒâζ×ÅÄãÒѾÍêÈ«Àí½âÄãËù¿ª·¢µÄÓ¦ÓõÄÌØµã¡£µ±È»£¬ÎÒÃDz»ÄÜÒÔÆ«¸ÅÈ«£¬Õâ²»ÄÜ×÷ΪÆÀ¼ÛÒ»¸öºÃµÄ¿ª·¢ÈËÔ±µÄ¹²Í¨±ê×¼¡£µ«ÊÇ£¬ÎÒҪ˵µÄÊÇ£¬ÉîÈëÀí½âGCÊdzÉΪһÃûΰ´óµÄ³ÌÐòÔ±µÄ±Ø¾Ö®Â·¡£
ÕâÊdzÉΪJavaGCר¼ÒϵÁÐÎÄÕµĵÚһƪ£¬±¾ÆªÖ÷ÒªÕë¶ÔGC»úÖÆ½øÐнéÉÜ£¬ÔÚÏÂһƪÖУ¬ÎÒÃǽ«Öصã̽ÌÖ·ÖÎöGC״̬ÒÔ¼°À´×ÔNHNµÄGCµ÷ÓŵÄÀý×Ó¡£
±¾ÎĵÄÄ¿µÄÊÇÒÔÒ»ÖÖ¼òµ¥µÄ·½Ê½ÏòÄã½éÉÜGC»úÖÆ¡£ÎÒÏ£ÍûÕâЩÎÄÕÂÄܹ»°ïµ½Ä㡣ʵ¼ÊÉÏ£¬ÎÒµÄѧÉúÒѾÔÚTwitterÉÏ·¢²¼ÁËһЩºÜºÃµÄ¹ØÓÚJavaÄں˵ÄÎÄÕ£¬²¢ÇÒ´óÊÜ»¶Ó¡£ÓÐÐËȤµÄ»°£¬ÄãÒ²¿ÉÒÔ¹Ø×¢ËûÃÇ¡£
»Øµ½ÕýÌ⣬ÔÛÃǼÌÐøÌ¸À¬»ø»ØÊÕ£¬ÔÚѧϰGC֮ǰ£¬ÄãÊ×ÏÈÓ¦¸Ã¼Çסһ¸öµ¥´Ê£º¡°stop-the-world¡±¡£Stop-the-world»áÔÚÈκÎÒ»ÖÖGCËã·¨Öз¢Éú¡£Stop-the-worldÒâζ×Å JVM ÒòΪҪִÐÐGC¶øÍ£Ö¹ÁËÓ¦ÓóÌÐòµÄÖ´ÐС£µ±Stop-the-world·¢Éúʱ£¬³ýÁËGCËùÐèµÄÏß³ÌÒÔÍ⣬ËùÓÐÏ̶߳¼´¦Óڵȴý״̬£¬Ö±µ½GCÈÎÎñÍê³É¡£GCÓÅ»¯ºÜ¶àʱºò¾ÍÊÇÖ¸¼õÉÙStop-the-world·¢ÉúµÄʱ¼ä¡£
°´´úµÄÀ¬»ø»ØÊÕ»úÖÆ
ÔÚJava³ÌÐòÖв»ÄÜÏÔʽµØ·ÖÅäºÍ×¢ÏúÄÚ´æ¡£ÓÐЩÈ˰ÑÏà¹ØµÄ¶ÔÏóÉèÖÃΪnull»òÕßµ÷ÓÃSystem.gc()À´ÊÔͼÏÔʽµØÇåÀíÄÚ´æ¡£ÉèÖÃΪnullÖÁÉÙûʲô»µ´¦£¬µ«Êǵ÷ÓÃSystem.gc()»áÏÔÖøµØÓ°ÏìϵͳÐÔÄÜ£¬±ØÐë³¹µ×¶Å¾ø£¨»¹ºÃ£¬ÎÒ»¹Ã»Óмûµ½NHNµÄÄĸö¿ª·¢Õßµ÷ÓÃÕâ¸ö·½·¨£©¡£
ÔÚJavaÖУ¬¿ª·¢ÈËÔ±ÎÞ·¨Ö±½ÓÔÚ³ÌÐò´úÂëÖÐÇåÀíÄڴ棬¶øÊÇÓÉÀ¬»ø»ØÊÕÆ÷×Ô¶¯Ñ°ÕÒ²»±ØÒªµÄÀ¬»ø¶ÔÏ󣬲¢ÇÒÇåÀíµôËûÃÇ¡£À¬»ø»ØÊÕÆ÷»áÔÚÏÂÃæÁ½ÖÖ¼ÙÉ裨hypotheses£©³ÉÁ¢µÄÇé¿öϱ»´´½¨£¨³ÆÖ®Îª¼ÙÉè²»Èç¸ÄÎªÍÆ²â£¨suppositions£©»òÕßǰÌᣨpreconditions£©£©¡£
´ó¶àÊý¶ÔÏó»áºÜ¿ì±äµÃ²»¿É´ï
Ö»ÓкÜÉÙµÄÓÉÀ϶ÔÏ󣨴´½¨Ê±¼ä½Ï³¤µÄ¶ÔÏó£©Ö¸ÏòÐÂÉú¶ÔÏóµÄÒýÓÃ
ÕâЩ¼ÙÉèÎÒÃdzÆÖ®ÎªÈõÄê´ú¼ÙÉ裨 weak generational hypothesis£©¡£ÎªÁËÇ¿»¯ÕâÒ»¼ÙÉ裬HotSpotÐéÄâ»ú½«ÆäÎïÀíÉÏ»®·ÖΪÁ½¸ö¨CÐÂÉú´ú£¨young generation£©ºÍÀÏÄê´ú£¨old generation£©¡£
ÐÂÉú´ú£¨Young generation£©: ¾ø´ó¶àÊý×îб»´´½¨µÄ¶ÔÏó»á±»·ÖÅäµ½ÕâÀÓÉÓڴ󲿷ֶÔÏóÔÚ´´½¨ºó»áºÜ¿ì±äµÃ²»¿Éµ½´ï£¬ËùÒԺܶà¶ÔÏó±»´´½¨ÔÚÐÂÉú´ú£¬È»ºóÏûʧ¡£¶ÔÏó´ÓÕâ¸öÇøÓòÏûʧµÄ¹ý³ÌÎÒÃdzÆÖ®Îª¡±minor GC¡°¡£
ÀÏÄê´ú£¨Old generation£©: ¶ÔÏóûÓбäµÃ²»¿É´ï£¬²¢ÇÒ´ÓÐÂÉú´úÖдæ»îÏÂÀ´£¬»á±»¿½±´µ½ÕâÀï¡£ÆäËùÕ¼ÓõĿռäÒª±ÈÐÂÉú´ú¶à¡£Ò²ÕýÓÉÓÚÆäÏà¶Ô½Ï´óµÄ¿Õ¼ä£¬·¢ÉúÔÚÀÏÄê´úÉϵÄGCÒª±ÈÐÂÉú´úÉٵöࡣ¶ÔÏó´ÓÀÏÄê´úÖÐÏûʧµÄ¹ý³Ì£¬ÎÒÃdzÆÖ®Îª¡±major GC¡°£¨»òÕß¡±full GC¡°£©
Çë¿´ÏÂÃæÕâ¸öͼ±í¡£

ͼ1 : GC ¿Õ¼ä & Êý¾ÝÁ÷
ÉÏͼÖеij־ôú£¨ permanent generation £©Ò²±»³ÆÎª·½·¨Çø£¨method area£©¡£ËûÓÃÀ´±£´æÀà³£Á¿ÒÔ¼°×Ö·û´®³£Á¿¡£Òò´Ë£¬Õâ¸öÇøÓò²»ÊÇÓÃÀ´ÓÀ¾ÃµÄ´æ´¢ÄÇЩ´ÓÀÏÄê´ú´æ»îÏÂÀ´µÄ¶ÔÏó¡£Õâ¸öÇøÓòÒ²¿ÉÄÜ·¢ÉúGC¡£²¢ÇÒ·¢ÉúÔÚÕâ¸öÇøÓòÉϵÄGCʼþÒ²»á±»ËãΪmajor GC¡£
ÓÐЩÈË¿ÉÄÜ»áÎÊ£º
Èç¹ûÀÏÄê´úµÄ¶ÔÏóÐèÒªÒýÓÃÒ»¸öÐÂÉú´úµÄ¶ÔÏ󣬻ᷢÉúÊ²Ã´ÄØ£¿
ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÀÏÄê´úÖдæÔÚÒ»¸ö¡±card table¡°£¬ËûÊÇÒ»¸ö512 byte´óСµÄ¿é¡£ËùÓÐÀÏÄê´úµÄ¶ÔÏóÖ¸ÏòÐÂÉú´ú¶ÔÏóµÄÒýÓö¼»á±»¼Ç¼ÔÚÕâ¸ö±íÖС£µ±Õë¶ÔÐÂÉú´úÖ´ÐÐGCµÄʱºò£¬Ö»ÐèÒª²éѯcard tableÀ´¾ö¶¨ÊÇ·ñ¿ÉÒÔ±»ÊÕ¼¯£¬¶ø²»ÓòéѯÕû¸öÀÏÄê´ú¡£Õâ¸öcard tableÓÉÒ»¸öwrite barrierÀ´¹ÜÀí¡£write barrier¸øGC´øÀ´Á˺ܴóµÄÐÔÄÜÌáÉý£¬ËäÈ»ÓÉ´Ë¿ÉÄÜ´øÀ´Ò»Ð©¿ªÏú£¬µ«GCµÄÕûÌåʱ¼ä±»ÏÔÖøµÄ¼õÉÙ¡£

ͼ 2: Card Table ½á¹¹
ÐÂÉú´úµÄ¹¹³É
ΪÁ˸üºÃµØÀí½âGC£¬ÎÒÃÇÏÖÔÚÀ´Ñ§Ï°ÐÂÉú´ú£¬ÐÂÉú´úÊÇÓÃÀ´±£´æÄÇЩµÚÒ»´Î±»´´½¨µÄ¶ÔÏó£¬Ëû¿ÉÒÔ±»·ÖΪÈý¸ö¿Õ¼ä
Ò»¸öÒÁµéÔ°¿Õ¼ä£¨Eden £©
Á½¸öÐÒ´æÕ߿ռ䣨Survivor £©
Ò»¹²ÓÐÈý¸ö¿Õ¼ä£¬ÆäÖаüº¬Á½¸öÐÒ´æÕ߿ռ䡣ÿ¸ö¿Õ¼äµÄÖ´ÐÐ˳ÐòÈçÏ£º
¾ø´ó¶àÊý¸Õ¸Õ±»´´½¨µÄ¶ÔÏó»á´æ·ÅÔÚÒÁµéÔ°¿Õ¼ä¡£
ÔÚÒÁµéÔ°¿Õ¼äÖ´ÐÐÁ˵ÚÒ»´ÎGCÖ®ºó£¬´æ»îµÄ¶ÔÏó±»Òƶ¯µ½ÆäÖÐÒ»¸öÐÒ´æÕ߿ռ䡣
´Ëºó£¬ÔÚÒÁµéÔ°¿Õ¼äÖ´ÐÐGCÖ®ºó£¬´æ»îµÄ¶ÔÏó»á±»¶Ñ»ýÔÚͬһ¸öÐÒ´æÕ߿ռ䡣
µ±Ò»¸öÐÒ´æÕ߿ռ䱥ºÍ£¬»¹ÔÚ´æ»îµÄ¶ÔÏó»á±»Òƶ¯µ½ÁíÒ»¸öÐÒ´æÕ߿ռ䡣֮ºó»áÇå¿ÕÒѾ±¥ºÍµÄÄǸöÐÒ´æÕ߿ռ䡣
ÔÚÒÔÉϵIJ½ÖèÖÐÖØ¸´¼¸´ÎÒÀÈ»´æ»îµÄ¶ÔÏó£¬¾Í»á±»ÒÆ¶¯µ½ÀÏÄê´ú¡£
Èç¹ûÄã×Ðϸ¹Û²ìÕâЩ²½Öè¾Í»á·¢ÏÖ£¬ÆäÖÐÒ»¸öÐÒ´æÕß¿Õ¼ä±ØÐë±£³ÖÊǿյġ£Èç¹ûÁ½¸öÐÒ´æÕ߿ռ䶼ÓÐÊý¾Ý£¬»òÕßÁ½¸ö¿Õ¼ä¶¼Êǿյģ¬ÄÇÒ»¶¨±êÖ¾×ÅÄãµÄϵͳ³öÏÖÁËijÖÖ´íÎó¡£
ͨ¹ýƵ·±µÄminor GC½«Êý¾ÝÒÆ¶¯µ½ÀÏÄê´úµÄ¹ý³Ì¿ÉÒÔÓÃÏÂͼÀ´ÃèÊö£º

ͼ 3: GCÖ´ÐÐǰºó¶Ô±È
ÐèҪעÒâµÄÊÇHotSpotÐéÄâ»úʹÓÃÁËÁ½ÖÖ¼¼ÊõÀ´¼Ó¿ìÄÚ´æ·ÖÅä¡£ËûÃÇ·Ö±ðÊÇÊÇ¡±bump-the-pointer¡°ºÍ¡°TLABs£¨Thread-Local Allocation Buffers£©¡±¡£
Bump-the-pointer¼¼Êõ¸ú×ÙÔÚÒÁµéÔ°¿Õ¼ä´´½¨µÄ×îºóÒ»¸ö¶ÔÏó¡£Õâ¸ö¶ÔÏó»á±»·ÅÔÚÒÁµéÔ°¿Õ¼äµÄ¶¥²¿¡£Èç¹ûÖ®ºóÔÙÐèÒª´´½¨¶ÔÏó£¬Ö»ÐèÒª¼ì²éÒÁµéÔ°¿Õ¼äÊÇ·ñÓÐ×ã¹»µÄÊ£Óà¿Õ¼ä¡£Èç¹ûÓÐ×ã¹»µÄ¿Õ¼ä£¬¶ÔÏó¾Í»á±»´´½¨ÔÚÒÁµéÔ°¿Õ¼ä£¬²¢ÇÒ±»·ÅÖÃÔÚ¶¥²¿¡£ÕâÑùÒÔÀ´£¬Ã¿´Î´´½¨ÐµĶÔÏóʱ£¬Ö»ÐèÒª¼ì²é×îºó±»´´½¨µÄ¶ÔÏó¡£Õ⽫¼«´óµØ¼Ó¿ìÄÚ´æ·ÖÅäËÙ¶È¡£µ«ÊÇ£¬Èç¹ûÎÒÃÇÔÚ¶àÏ̵߳ÄÇé¿öÏ£¬ÊÂÇ齫½ØÈ»²»Í¬¡£Èç¹ûÏëÒªÒÔḬ̈߳²È«µÄ·½Ê½ÒÔ¶àÏß³ÌÔÚÒÁµéÔ°¿Õ¼ä´æ´¢¶ÔÏ󣬲»¿É±ÜÃâµÄÐèÒª¼ÓËø£¬¶øÕ⽫¼«´óµØµÄÓ°ÏìÐÔÄÜ¡£TLABs ÊÇHotSpotÐéÄâ»úÕë¶ÔÕâÒ»ÎÊÌâµÄ½â¾ö·½°¸¡£¸Ã·½°¸ÎªÃ¿Ò»¸öÏß³ÌÔÚÒÁµéÔ°¿Õ¼ä·ÖÅäÒ»¿é¶ÀÏíµÄ¿Õ¼ä£¬ÕâÑùÿ¸öÏß³ÌÖ»·ÃÎÊËûÃÇ×Ô¼ºµÄTLAB¿Õ¼ä£¬ÔÙÓëbump-the-pointer¼¼Êõ½áºÏ¿ÉÒÔÔÚ²»¼ÓËøµÄÇé¿öÏ·ÖÅäÄÚ´æ¡£
ÒÔÉÏÊÇÕë¶ÔÐÂÉú´ú¿Õ¼äGC¼¼ÊõµÄ¼òÒª½éÉÜ£¬Äã²»ÐèÒª¿ÌÒâ¼ÇסÎÒ¸Õ¸ÕÌáµ½µÄÁ½ÖÖ¼¼Êõ¡£²»ÖªµÀËûÃDz»»á¶ÔÄã²úÉúʲôӰÏ죬µ«ÊÇÇëÎñ±Ø¼ÇסÔÚ¶ÔÏó¸Õ¸Õ±»´´½¨Ö®ºó£¬ÊDZ£´æÔÚÒÁµéÔ°¿Õ¼äµÄ¡£ÄÇЩ³¤ÆÚ´æ»îµÄ¶ÔÏó»á¾ÓÉÐÒ´æÕ߿ռäת´æÔÚÀÏÄê´ú¿Õ¼ä¡£
ÀÏÄê´úGC´¦Àí»úÖÆ
ÀÏÄê´ú¿Õ¼äµÄGCʼþ»ù±¾ÉÏÊÇÔÚ¿Õ¼äÒÑÂúʱ·¢Éú£¬Ö´ÐеĹý³Ì¸ù¾ÝGCÀàÐͲ»Í¬¶ø²»Í¬£¬Òò´Ë£¬Á˽ⲻͬµÄGCÀàÐͽ«ÓÐÖúÓÚÄãÀí½â±¾½ÚµÄÄÚÈÝ¡£
JDK7Ò»¹²ÓÐ5ÖÖGCÀàÐÍ£º
Serial GC
Parallel GC
Parallel Old GC (Parallel Compacting GC)
Concurrent Mark & Sweep GC (or ¡°CMS¡±)
Garbage First (G1) GC
ÆäÖУ¬Serial GC²»Ó¦¸Ã±»ÓÃÔÚ·þÎñÆ÷ÉÏ¡£ÕâÖÖGCÀàÐÍÔÚµ¥ºËCPUµÄ×ÀÃæµçÄÔʱ´ú¾Í´æÔÚÁË¡£Ê¹ÓÃSerial GC»áÏÔÖøµÄ½µµÍÓ¦ÓõÄÐÔÄÜÖ¸±ê¡£
ÏÖÔÚ£¬ÈÃÎÒÃǹ²Í¬Ñ§Ï°Ã¿Ò»ÖÖGCÀàÐÍ
1. Serial GC (-XX:+UseSerialGC)
ÐÂÉú´ú¿Õ¼äµÄGC·½Ê½ÎÒÃÇÔÚÇ°ÃæÒѾ½éÉܹýÁË£¬ÔÚÀÏÄê´ú¿Õ¼äÖеÄGC²ÉÈ¡³ÆÖ®Îª¡±mark-sweep-compact¡°µÄËã·¨¡£
Ëã·¨µÄµÚÒ»²½ÊDZê¼ÇÀÏÄê´úÖÐÒÀÈ»´æ»î¶ÔÏó¡££¨±ê¼Ç£©
µÚ¶þ²½£¬´ÓÍ·¿ªÊ¼¼ì²é¶ÑÄÚ´æ¿Õ¼ä£¬²¢ÇÒÖ»ÁôÏÂÒÀÈ»ÐÒ´æµÄ¶ÔÏó¡££¨ÇåÀí£©
×îºóÒ»²½£¬´ÓÍ·¿ªÊ¼£¬Ë³ÐòµØÌîÂú¶ÑÄÚ´æ¿Õ¼ä£¬²¢ÇÒ½«¶ÔÄÚ´æ¿Õ¼ä·Ö³ÉÁ½²¿·Ö£ºÒ»¸ö±£´æ×ŶÔÏó£¬ÁíÒ»¸ö¿Õ×Å£¨Ñ¹Ëõ£©¡£
2. Parallel GC (-XX:+UseParallelGC)
ͼ 4: Serial GC Óë Parallel GCµÄÇø±ð
´ÓÉÏͼÖУ¬Äã¿ÉÒÔÇáÒ׵ؿ´³öserial GCºÍparallel GCµÄÇø±ð£¬serial GCֻʹÓÃÒ»¸öÏß³ÌÖ´ÐÐGC£¬¶øparallel GCʹÓöà¸öỊ̈߳¬Òò´Ëparallel GC¸ü¸ßЧ¡£ÕâÖÖGCÔÚÄÚ´æ³ä×ãÒÔ¼°¶àºËµÄÇé¿öÏ»áºÜÓÐÓã¬Òò´ËÎÒÃÇÒ²³ÆÖ®Îª¡±throughput GC¡°¡£
3. Parallel Old GC(-XX:+UseParallelOldGC)
Parallel Old GCÔÚJDK5Ö®ºó³öÏÖ¡£Óëparallel GCÏà±È£¬Î¨Ò»µÄÇø±ðÔÚÓÚÕë¶ÔÀÏÄê´úµÄGCËã·¨¡£Parallel Old GC·ÖΪÈý²½£º±ê¼Ç-»ã×Ü-ѹËõ£¨mark ¨C summary ¨C compaction£©¡£»ã×Ü£¨summary£©²½ÖèÓëÇåÀí£¨sweep£©µÄ²»Í¬Ö®´¦ÔÚÓÚ£¬Æä½«ÒÀÈ»ÐÒ´æµÄ¶ÔÏó·Ö·¢µ½GCÔ¤ÏÈ´¦ÀíºÃµÄ²»Í¬ÇøÓò£¬Ëã·¨Ïà¶ÔÇåÀíÀ´ËµÂÔ΢¸´ÔÓÒ»µã¡£
4. CMS GC (-XX:+UseConcMarkSweepGC)

ͼ 5: Serial GC & CMS GC
¾ÍÏñÄã´ÓÉÏͼ¿´µ½µÄÄÇÑù, CMS GC±ÈÎÒ֮ǰ½âÊ͵ĸ÷ÖÖËã·¨¶¼Òª¸´ÔӺܶࡣµÚÒ»²½³õʼ»¯±ê¼Ç£¨initial mark£© ±È½Ï¼òµ¥¡£ÕâÒ»²½ÖèÖ»ÊDzéÕÒÄÇЩ¾àÀëÀà¼ÓÔØÆ÷×î½üµÄÐÒ´æ¶ÔÏó¡£Òò´Ë£¬Í£¶ÙµÄʱ¼ä·Ç³£¶ÌÔÝ¡£ÔÚÖ®ºóµÄ²¢Ðбê¼Ç£¨ concurrent mark £©²½Ö裬ËùÓб»ÐÒ´æ¶ÔÏóÒýÓõĶÔÏó»á±»È·ÈÏÊÇ·ñÒѾ±»×·×ÙºÍУÑé¡£ÕâÒ»²½µÄ²»Í¬Ö®´¦ÔÚÓÚ£¬ÔÚ±ê¼ÇµÄ¹ý³ÌÖУ¬ÆäËûµÄÏß³ÌÒÀÈ»ÔÚÖ´ÐС£ÔÚÖØÐ±ê¼Ç£¨remark£©²½Ö裬»áÔٴμì²éÄÇЩÔÚ²¢Ðбê¼Ç²½ÖèÖÐÔö¼Ó»òÕßɾ³ýµÄÓëÐÒ´æ¶ÔÏóÒýÓõĶÔÏó¡£×îºó£¬ÔÚ²¢Ðн»»»£¨ concurrent sweep £©²½Ö裬ת½»À¬»ø»ØÊÕ¹ý³Ì´¦Àí¡£À¬»ø»ØÊÕ¹¤×÷»áÔÚÆäËûÏ̵߳ÄÖ´Ðйý³ÌÖÐÕ¹¿ª¡£Ò»µ©²ÉÈ¡ÁËÕâÖÖGCÀàÐÍ£¬ÓÉGCµ¼ÖµÄÔÝͣʱ¼ä»á¼«Æä¶ÌÔÝ¡£CMS GCÒ²±»³ÆÎªµÍÑÓ³ÙGC¡£Ëü¾³£±»ÓÃÔÚÄÇЩ¶ÔÓÚÏìӦʱ¼äÒªÇóÊ®·Ö¿Á¿ÌµÄÓ¦ÓÃÖ®ÉÏ¡£
µ±È»£¬ÕâÖÖGCÀàÐÍÔÚÓµÓÐstop-the-worldʱ¼äºÜ¶ÌµÄÓŵãµÄͬʱ£¬Ò²ÓÐÈçÏÂȱµã£º
Ëü»á±ÈÆäËûGCÀàÐÍÕ¼Óøü¶àµÄÄÚ´æºÍCPU
ĬÈÏÇé¿öϲ»Ö§³ÖѹËõ²½Öè
ÔÚʹÓÃÕâ¸öGCÀàÐÍ֮ǰÄãÐèÒªÉ÷ÖØ¿¼ÂÇ¡£Èç¹ûÒòΪÄÚ´æË鯬¹ý¶à¶øµ¼ÖÂѹËõÈÎÎñ²»µÃ²»Ö´ÐУ¬ÄÇôstop-the-worldµÄʱ¼äÒª±ÈÆäËûÈκÎGCÀàÐͶ¼³¤£¬ÄãÐèÒª¿¼ÂÇѹËõÈÎÎñµÄ·¢ÉúƵÂÊÒÔ¼°Ö´ÐÐʱ¼ä¡£
5. G1 GC
×îºó£¬ÎÒÃÇÀ´Ñ§Ï°À¬»ø»ØÊÕÓÅÏÈ£¨G1£©GCÀàÐÍ¡£

ͼ 6: G1 GCµÄ½á¹¹
Èç¹ûÄãÏëÒªÀí½âG1£¬Ê×ÏÈÄãÒªÍü¼ÇÄãËùѧ¹ýµÄÐÂÉú´úºÍÀÏÄê´úµÄ¸ÅÄî¡£ÕýÈçÄãÔÚÉÏͼËù¿´µ½µÄ£¬Ã¿¸ö¶ÔÏó±»·ÖÅäµ½²»Í¬µÄ¸ñ×Ó£¬ËæºóGCÖ´ÐС£µ±Ò»¸öÇøÓò×°ÂúÖ®ºó£¬¶ÔÏó±»·ÖÅäµ½ÁíÒ»¸öÇøÓò£¬²¢Ö´ÐÐGC¡£ÕâÖм䲻ÔÙÓдÓÐÂÉú´úÒÆ¶¯µ½ÀÏÄê´úµÄÈý¸ö²½Öè¡£Õâ¸öÀàÐÍÊÇΪÁËÌæ´úCMS GC¶ø±»´´½¨µÄ£¬ÒòΪCMS GCÔÚ³¤Ê±¼ä³ÖÐøÔË×÷ʱ»á²úÉúºÜ¶àÎÊÌâ¡£
G1×î´óµÄºÃ´¦ÊÇÐÔÄÜ£¬Ëû±ÈÎÒÃÇÔÚÉÏÃæÌÖÂÛ¹ýµÄÈκÎÒ»ÖÖGC¶¼Òª¿ì¡£µ«ÊÇÔÚJDK 6ÖУ¬Ëû»¹Ö»ÊÇÒ»¸öÔçÆÚÊÔÓð汾¡£ÔÚJDK7Ö®ºó²ÅÓɹٷ½Õýʽ·¢²¼¡£¾ÍÎÒ¸öÈË¿´À´£¬NHNÔÚ½«JDK 7ÕýʽͶÈëÉÌÓÃ֮ǰÐèÒªºÜ³¤µÄÒ»¶Î²âÊÔÆÚ£¨ÖÁÉÙÒ»Ä꣩¡£Òò´ËÄã¿ÉÄÜÐèÒªÔÙµÈÒ»¶Îʱ¼ä¡£²¢ÇÒ£¬ÎÒÒ²Ìý¹ý¼¸´ÎʹÓÃÁËJDK 6ÖеÄG1¶øµ¼ÖÂJavaÐéÄâ»úå´»úµÄʼþ¡£ÇëÄÍÐĵĵȵ½Ëü¸üÎȶ¨°É¡£
ÏÂÒ»´ÎÎÒ½«ÌÖÂÛGCÓÅ»¯Ïà¹ØµÄÎÊÌ⣬µ«ÊÇÔÚ´Ë֮ǰÎÒÒªÏÈÃ÷È·Ò»¼þÊÂÇ飬¼ÙÈçÓ¦ÓÃÖд´½¨µÄËùÓжÔÏóµÄ´óСºÍÀàÐͶ¼ÊÇͳһµÄ£¬ÄÇô¹«Ë¾Ê¹ÓõÄWASµÄGC²ÎÊý¿ÉÒÔÊÇÏàͬµÄ¡£µ«ÊÇWASËù´´½¨¶ÔÏóµÄ´óСºÍÉúÃüÖÜÆÚ¸ù¾Ý·þÎñÒÔ¼°Ó²¼þµÄ²»Í¬¶ø²»Í¬¡£»»¾ä»°Ëµ£¬²»ÄÜÒòΪij¸öÓ¦ÓÃʹÓõÄGC²ÎÊý¡°A¡±£¬¾Í˵Ã÷ͬÑùµÄ²ÎÊýÒ²ÄܸøÆäËû·þÎñ´øÀ´×î¼ÑµÄЧ¹û¡£¶øÊÇÒªÒòµØÖÆÒË£¬ÓеķÅʸ¡£ÎÒÃÇÐèÒªÕÒµ½ÊʺÏÿ¸öWASÏ̵߳IJÎÊý£¬²¢ÇÒ³ÖÐøµÄ¼à¿ØºÍÓÅ»¯Ã¿¸öÉ豸ÉϵÄWASʵÀý¡£Õâ²¢²»ÊÇÎÒµÄÒ»¼Ò̸֮£¬¶øÊǸºÔðOracle JavaÐéÄâ»úÑз¢µÄ¹¤³ÌʦÔÚ JavaOne 2010ÉÏÒѾÌÖÂÛ¹ýµÄ¡£
±¾ÎÄÖÐÎÒÃǼòÂԵĽéÉÜÁËJavaµÄGC»úÖÆ£¬Çë¼ÌÐø¹ØÓÚÎÒÃǵĺóÐøÎÄÕ£¬ÎÒÃǽ«»áÌÖÂÛÈçºÎ¼à¿ØJava GC״̬ÒÔ¼°ÓÅ»¯GC¡£
ÁíÍ⣬ÎÒÌØ±ðÍÆ¼öÒ»±¾2011Äê12Ô·¢²¼µÄ¡¶JavaÐÔÄÜ¡·£¨Amazon,Ò²¿ÉÒÔͨ¹ýsafariÔÚÏßÔĶÁ£©£¬»¹ÓÐÔÚOracle¹ÙÍø·¢²¼µÄ°×ƤÊé¡¶Java HotSpotTMÐéÄâ»úÄÚ´æ¹ÜÀí¡·£¨Õâ±¾ÊéÓëJavaÐÔÄÜÓÅ»¯²»ÊÇͬһ±¾£© ×÷ÕßSangmin Lee, NHN¹«Ë¾£¬ÐÔÄܹ¤³ÌʦʵÑéÊҸ߼¶¹¤³Ìʦ¡£ |