Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
³ÉΪJavaGCר¼ÒÉÏ£¨1£©¡ªÉîÈëdz³öJavaÀ¬»ø»ØÊÕ»úÖÆ
 
×÷ÕߣºÍõÏþ½Ü  À´Ô´£ºImportNew ·¢²¼ÓÚ 2016-5-4
  2208  次浏览      33
 

¶ÔÓÚ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¹«Ë¾£¬ÐÔÄܹ¤³ÌʦʵÑéÊҸ߼¶¹¤³Ìʦ¡£

 
   
2208 ´Îä¯ÀÀ       33
 
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
 
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
 
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-28[±±¾©]
OCSMPÈÏÖ¤£ºOCSMP-MBF 8-29[±±¾©]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 9-9[±±¾©]
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸Àýʵ¼ù 9-24[±±¾©]
ÐèÇó·ÖÎöʦÄÜÁ¦ÅàÑø 10-30[±±¾©]
MBSEÌåϵÓëʵ¼ù 8-26[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þµÄ˼¿¼
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS
Ïà¹ØÅàѵ¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
Windows Azure ÔÆ¼ÆËãÓ¦ÓÃ

ĦÍÐÂÞÀ­ ÔÆÆ½Ì¨µÄ¹¹½¨ÓëÓ¦ÓÃ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ù
ijÑз¢ÖÐÐÄ Openstackʵ¼ù
ÖªÃûµç×Ó¹«Ë¾ ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦ÓÃ
ijµçÁ¦ÐÐÒµ »ùÓÚÔÆÆ½Ì¨¹¹½¨ÔÆ·þÎñ
ÔÆ¼ÆËãÓëWindows AzureÅàѵ
±±¾© ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ