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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
JAVAÐéÄâ»úÔ­Àí
 
  1666  次浏览      27
 2019-9-18 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚcsdn,ÎÄÕÂÖ÷Òª´Óһϼ¸¸ö·½ÃæÀ´½éÉܳÌÐò¼ÆÊýÆ÷£¬ÐéÄâ»úÕ»£¬±¾µØ·½·¨Õ»£¬¶ÑÇø£¬·½·¨Çø¼°Ö±½ÓÄÚ´æµÈµÈÏà¹Ø·½Ãæ½éÉÜ¡£

Java GC£¨Garbage Collection£¬À¬»øÊÕ¼¯£¬À¬»ø»ØÊÕ£©»úÖÆ£¬ÊÇJavaÓëC++/CµÄÖ÷񻂿±ðÖ®Ò»£¬×÷ΪJava¿ª·¢Õߣ¬Ò»°ã²»ÐèҪרÃűàдÄÚ´æ»ØÊÕºÍÀ¬»øÇåÀí´úÂë¡£ÔÚJavaÐéÄâ»úÖУ¬´æÔÚ×Ô¶¯ÄÚ´æ¹ÜÀíºÍÀ¬»øÇåɨ»úÖÆ¡£¸ÅÀ¨µØËµ£¬¸Ã»úÖÆ¶ÔJVM£¨Java Virtual Machine£©ÖеÄÄÚ´æ½øÐбê¼Ç£¬²¢È·¶¨ÄÄЩÄÚ´æÐèÒª»ØÊÕ£¬¸ù¾ÝÒ»¶¨µÄ»ØÊÕ²ßÂÔ£¬×Ô¶¯µÄ»ØÊÕÄڴ棬ÓÀ²»Í£Ï¢£¨Nerver Stop£©µÄ±£Ö¤JVMÖеÄÄÚ´æ¿Õ¼ä£¬·ÀÖ¹³öÏÖÄÚ´æÐ¹Â¶ºÍÒç³öÎÊÌâ¡£

JDKʹÓõÄÐéÄâ»úÊÇhotspot

Java GC»úÖÆÖ÷ÒªÍê³É3¼þÊ£º

È·¶¨ÄÄЩÄÚ´æÐèÒª»ØÊÕ

È·¶¨Ê²Ã´Ê±ºòÐèÒªÖ´ÐÐGC

ÈçºÎÖ´ÐÐGC

ÎÒÃǽ«´Ó4¸ö·½ÃæÑ§Ï°Java GC»úÖÆ

1£¬ÄÚ´æÊÇÈçºÎ·ÖÅäµÄ£»

2£¬ÈçºÎ±£Ö¤ÄÚ´æ²»±»´íÎó»ØÊÕ£¨¼´£ºÄÄЩÄÚ´æÐèÒª»ØÊÕ£©£»

3£¬ÔÚʲôÇé¿öÏÂÖ´ÐÐGCÒÔ¼°Ö´ÐÐGCµÄ·½Ê½£»

4£¬ÈçºÎ¼à¿ØºÍÓÅ»¯GC»úÖÆ¡£

1£¬³ÌÐò¼ÆÊýÆ÷£¨Program Counter Register£©£º³ÌÐò¼ÆÊýÆ÷ÊÇÒ»¸ö±È½ÏСµÄÄÚ´æÇøÓò£¬ÓÃÓÚָʾµ±Ç°Ïß³ÌËùÖ´ÐеÄ×Ö½ÚÂëÖ´Ðе½Á˵ڼ¸ÐУ¬¿ÉÒÔÀí½âΪÊǵ±Ç°Ï̵߳ÄÐкÅָʾÆ÷¡£×Ö½ÚÂë½âÊÍÆ÷ÔÚ¹¤×÷ʱ£¬»áͨ¹ý¸Ä±äÕâ¸ö¼ÆÊýÆ÷µÄÖµÀ´È¡ÏÂÒ»ÌõÓï¾äÖ¸Áî¡£

ÿ¸ö³ÌÐò¼ÆÊýÆ÷Ö»ÓÃÀ´¼Ç¼һ¸öÏ̵߳ÄÐкţ¬ËùÒÔËüÊÇÏß³Ì˽ÓУ¨Ò»¸öÏ߳̾ÍÓÐÒ»¸ö³ÌÐò¼ÆÊýÆ÷£©µÄ¡£

Èç¹û³ÌÐòÖ´ÐеÄÊÇÒ»¸öJava·½·¨£¬Ôò¼ÆÊýÆ÷¼Ç¼µÄÊÇÕýÔÚÖ´ÐеÄÐéÄâ»ú×Ö½ÚÂëÖ¸ÁîµØÖ·£»Èç¹ûÕýÔÚÖ´ÐеÄÊÇÒ»¸ö±¾µØ£¨native£¬ÓÉCÓïÑÔ±àдÍê³É£©·½·¨£¬Ôò¼ÆÊýÆ÷µÄֵΪUndefined£¬ÓÉÓÚ³ÌÐò¼ÆÊýÆ÷Ö»ÊǼǼµ±Ç°Ö¸ÁîµØÖ·£¬ËùÒÔ²»´æÔÚÄÚ´æÒç³öµÄÇé¿ö£¬Òò´Ë£¬³ÌÐò¼ÆÊýÆ÷Ò²ÊÇËùÓÐJVMÄÚ´æÇøÓòÖÐΨһһ¸öûÓж¨ÒåOutOfMemoryErrorµÄÇøÓò¡£

2£¬ÐéÄâ»úÕ»£¨JVM Stack£©£ºÒ»¸öÏ̵߳Äÿ¸ö·½·¨ÔÚÖ´ÐеÄͬʱ£¬¶¼»á´´½¨Ò»¸öÕ»Ö¡£¨Statck Frame£©£¬Õ»Ö¡Öд洢µÄÓоֲ¿±äÁ¿±í¡¢²Ù×÷Õ¾¡¢¶¯Ì¬Á´½Ó¡¢·½·¨³ö¿ÚµÈ£¬µ±·½·¨±»µ÷ÓÃʱ£¬Õ»Ö¡ÔÚJVMÕ»ÖÐÈëÕ»£¬µ±·½·¨Ö´ÐÐÍê³Éʱ£¬Õ»Ö¡³öÕ»¡£

¾Ö²¿±äÁ¿±íÖд洢×Å·½·¨µÄÏà¹Ø¾Ö²¿±äÁ¿£¬°üÀ¨¸÷ÖÖ»ù±¾Êý¾ÝÀàÐÍ£¬¶ÔÏóµÄÒýÓ㬷µ»ØµØÖ·µÈ¡£ÔÚ¾Ö²¿±äÁ¿±íÖУ¬Ö»ÓÐlongºÍdoubleÀàÐÍ»áÕ¼ÓÃ2¸ö¾Ö²¿±äÁ¿¿Õ¼ä£¨Slot£¬¶ÔÓÚ32λ»úÆ÷£¬Ò»¸öSlot¾ÍÊÇ32¸öbit£©£¬ÆäËü¶¼ÊÇ1¸öSlot¡£ÐèҪעÒâµÄÊÇ£¬¾Ö²¿±äÁ¿±íÊÇÔÚ±àÒëʱ¾ÍÒѾ­È·¶¨ºÃµÄ£¬·½·¨ÔËÐÐËùÐèÒª·ÖÅäµÄ¿Õ¼äÔÚÕ»Ö¡ÖÐÊÇÍêȫȷ¶¨µÄ£¬ÔÚ·½·¨µÄÉúÃüÖÜÆÚÄÚ¶¼²»»á¸Ä±ä¡£

ÐéÄâ»úÕ»Öж¨ÒåÁËÁ½ÖÖÒì³££¬Èç¹ûÏ̵߳÷ÓõÄÕ»Éî¶È´óÓÚÐéÄâ»úÔÊÐíµÄ×î´óÉî¶È£¬ÔòÅ׳öStatckOverFlowError£¨Õ»Òç³ö£©£»²»¹ý¶àÊýJavaÐéÄâ»ú¶¼ÔÊÐí¶¯Ì¬À©Õ¹ÐéÄâ»úÕ»µÄ´óС(ÓÐÉÙ²¿·ÖÊǹ̶¨³¤¶ÈµÄ)£¬ËùÒÔÏ߳̿ÉÒÔÒ»Ö±ÉêÇëÕ»£¬Ö±µ½ÄÚ´æ²»×㣬´Ëʱ£¬»áÅ׳öOutOfMemoryError£¨ÄÚ´æÒç³ö£©¡£

ÿ¸öÏ̶߳ÔÓ¦×ÅÒ»¸öÐéÄâ»úÕ»£¬Òò´ËÐéÄâ»úÕ»Ò²ÊÇÏß³Ì˽Óеġ£

3£¬±¾µØ·½·¨Õ»£¨Native Method Statck£©£º±¾µØ·½·¨Õ»ÔÚ×÷Óã¬ÔËÐлúÖÆ£¬Òì³£ÀàÐ͵ȷ½Ãæ¶¼ÓëÐéÄâ»úÕ»Ïàͬ£¬Î¨Ò»µÄÇø±ðÊÇ£ºÐéÄâ»úÕ»ÊÇÖ´ÐÐJava·½·¨µÄ£¬¶ø±¾µØ·½·¨Õ»ÊÇÓÃÀ´Ö´ÐÐnative·½·¨µÄ£¬ÔںܶàÐéÄâ»úÖУ¨ÈçSunµÄJDKĬÈϵÄHotSpotÐéÄâ»ú£©£¬»á½«±¾µØ·½·¨Õ»ÓëÐéÄâ»úÕ»·ÅÔÚÒ»ÆðʹÓá£

±¾µØ·½·¨Õ»Ò²ÊÇÏß³Ì˽ÓеÄ

4£¬¶ÑÇø£¨Heap£©£º¶ÑÇøÊÇÀí½âJava GC»úÖÆ×îÖØÒªµÄÇøÓò£¬Ã»ÓÐÖ®Ò»¡£ÔÚJVMËù¹ÜÀíµÄÄÚ´æÖУ¬¶ÑÇøÊÇ×î´óµÄÒ»¿é£¬¶ÑÇøÒ²ÊÇJava GC»úÖÆËù¹ÜÀíµÄÖ÷ÒªÄÚ´æÇøÓò£¬¶ÑÇøÓÉËùÓÐÏ̹߳²Ïí£¬ÔÚÐéÄâ»úÆô¶¯Ê±´´½¨¡£¶ÑÇøµÄ´æÔÚÊÇΪÁË´æ´¢¶ÔÏóʵÀý£¬Ô­ÔòÉϽ²£¬ËùÓеĶÔÏó¶¼ÔÚ¶ÑÇøÉÏ·ÖÅäÄڴ棨²»¹ýÏÖ´ú¼¼ÊõÀҲ²»ÊÇÕâô¾ø¶ÔµÄ£¬Ò²ÓÐÕ»ÉÏÖ±½Ó·ÖÅäµÄ£©¡£

Ò»°ãµÄ£¬¸ù¾ÝJavaÐéÄâ»ú¹æ·¶¹æ¶¨£¬¶ÑÄÚ´æÐèÒªÔÚÂß¼­ÉÏÊÇÁ¬ÐøµÄ£¨ÔÚÎïÀíÉϲ»ÐèÒª£©£¬ÔÚʵÏÖʱ£¬¿ÉÒÔÊǹ̶¨´óСµÄ£¬Ò²¿ÉÒÔÊÇ¿ÉÀ©Õ¹µÄ£¬Ä¿Ç°Ö÷Á÷µÄÐéÄâ»ú¶¼ÊÇ¿ÉÀ©Õ¹µÄ¡£Èç¹ûÔÚÖ´ÐÐÀ¬»ø»ØÊÕÖ®ºó£¬ÈÔûÓÐ×ã¹»µÄÄÚ´æ·ÖÅ䣬Ҳ²»ÄÜÔÙÀ©Õ¹£¬½«»áÅ׳öOutOfMemoryError:Java heap spaceÒì³£¡£

¹ØÓÚ¶ÑÇøµÄÄÚÈÝ»¹Óкܶ࣬½«ÔÚϽڡ°JavaÄÚ´æ·ÖÅä»úÖÆ¡±ÖÐÏêϸ½éÉÜ¡£

5£¬·½·¨Çø£¨Method Area£©£ºÔÚJavaÐéÄâ»ú¹æ·¶ÖУ¬½«·½·¨Çø×÷Ϊ¶ÑµÄÒ»¸öÂß¼­²¿·ÖÀ´¶Ô´ý£¬µ«ÊÂʵÉÏ£¬·½·¨Çø²¢²»ÊǶѣ¨Non-Heap£©£»ÁíÍ⣬²»ÉÙÈ˵IJ©¿ÍÖУ¬½«Java GCµÄ·Ö´úÊÕ¼¯»úÖÆ·ÖΪ3¸ö´ú£ºÇàÄê´ú£¬ÀÏÄê´ú£¬ÓÀ¾Ã´ú£¬ÕâЩ×÷Õß½«·½·¨Çø¶¨ÒåΪ¡°ÓÀ¾Ã´ú¡±£¬ÕâÊÇÒòΪ£¬¶ÔÓÚ֮ǰµÄHotSpot JavaÐéÄâ»úµÄʵÏÖ·½Ê½ÖУ¬½«·Ö´úÊÕ¼¯µÄ˼ÏëÀ©Õ¹µ½ÁË·½·¨Çø£¬²¢½«·½·¨ÇøÉè¼Æ³ÉÁËÓÀ¾Ã´ú¡£²»¹ý£¬³ýHotSpotÖ®ÍâµÄ¶àÊýÐéÄâ»ú£¬²¢²»½«·½·¨Çøµ±×öÓÀ¾Ã´ú£¬HotSpot±¾Éí£¬Ò²¼Æ»®È¡ÏûÓÀ¾Ã´ú¡£±¾ÎÄÖУ¬ÓÉÓÚ±ÊÕßÖ÷ҪʹÓÃOracle JDK6.0£¬Òò´ËÈÔ½«Ê¹ÓÃÓÀ¾Ã´úÒ»´Ê¡£

·½·¨ÇøÊǸ÷¸öÏ̹߳²ÏíµÄÇøÓò£¬ÓÃÓÚ´æ´¢ÒѾ­±»ÐéÄâ»ú¼ÓÔØµÄÀàÐÅÏ¢£¨¼´¼ÓÔØÀàʱÐèÒª¼ÓÔØµÄÐÅÏ¢£¬°üÀ¨°æ±¾¡¢field¡¢·½·¨¡¢½Ó¿ÚµÈÐÅÏ¢£©¡¢final³£Á¿¡¢¾²Ì¬±äÁ¿¡¢±àÒëÆ÷¼´Ê±±àÒëµÄ´úÂëµÈ¡£

·½·¨ÇøÔÚÎïÀíÉÏÒ²²»ÐèÒªÊÇÁ¬ÐøµÄ£¬¿ÉÒÔÑ¡Ôñ¹Ì¶¨´óС»ò¿ÉÀ©Õ¹´óС£¬²¢ÇÒ·½·¨Çø±È¶Ñ»¹¶àÁËÒ»¸öÏÞÖÆ£º¿ÉÒÔÑ¡ÔñÊÇ·ñÖ´ÐÐÀ¬»øÊÕ¼¯¡£Ò»°ãµÄ£¬·½·¨ÇøÉÏÖ´ÐеÄÀ¬»øÊÕ¼¯ÊǺÜÉٵģ¬ÕâÒ²ÊÇ·½·¨Çø±»³ÆÎªÓÀ¾Ã´úµÄÔ­ÒòÖ®Ò»£¨HotSpot£©£¬µ«ÕâÒ²²»´ú±í×ÅÔÚ·½·¨ÇøÉÏÍêȫûÓÐÀ¬»øÊÕ¼¯£¬ÆäÉϵÄÀ¬»øÊÕ¼¯Ö÷ÒªÊÇÕë¶Ô³£Á¿³ØµÄÄÚ´æ»ØÊպͶÔÒѼÓÔØÀàµÄÐ¶ÔØ¡£

ÔÚ·½·¨ÇøÉϽøÐÐÀ¬»øÊÕ¼¯£¬Ìõ¼þ¿Á¿Ì¶øÇÒÏ൱À§ÄÑ£¬Ð§¹ûÒ²²»ÁîÈËÂúÒ⣬ËùÒÔÒ»°ã²»×öÌ«¶à¿¼ÂÇ£¬¿ÉÒÔÁô×÷ÒÔºó½øÒ»²½ÉîÈëÑо¿Ê±Ê¹Óá£

ÔÚ·½·¨ÇøÉ϶¨ÒåÁËOutOfMemoryError:PermGen spaceÒì³££¬ÔÚÄÚ´æ²»×ãʱÅ׳ö¡£

ÔËÐÐʱ³£Á¿³Ø£¨Runtime Constant Pool£©ÊÇ·½·¨ÇøµÄÒ»²¿·Ö£¬ÓÃÓÚ´æ´¢±àÒëÆÚ¾ÍÉú³ÉµÄ×ÖÃæ³£Á¿¡¢·ûºÅÒýÓᢷ­Òë³öÀ´µÄÖ±½ÓÒýÓ㨷ûºÅÒýÓþÍÊDZàÂëÊÇÓÃ×Ö·û´®±íʾij¸ö±äÁ¿¡¢½Ó¿ÚµÄλÖã¬Ö±½ÓÒýÓþÍÊǸù¾Ý·ûºÅÒýÓ÷­Òë³öÀ´µÄµØÖ·£¬½«ÔÚÀàÁ´½Ó½×¶ÎÍê³É·­Ò룩£»ÔËÐÐʱ³£Á¿³Ø³ýÁË´æ´¢±àÒëÆÚ³£Á¿Í⣬Ҳ¿ÉÒÔ´æ´¢ÔÚÔËÐÐʱ¼ä²úÉúµÄ³£Á¿£¨±ÈÈçStringÀàµÄintern()·½·¨£¬×÷ÓÃÊÇStringά»¤ÁËÒ»¸ö³£Á¿³Ø£¬Èç¹ûµ÷ÓõÄ×Ö·û¡°abc¡±ÒѾ­ÔÚ³£Á¿³ØÖУ¬Ôò·µ»Ø³ØÖеÄ×Ö·û´®µØÖ·£¬·ñÔò£¬Ð½¨Ò»¸ö³£Á¿¼ÓÈë³ØÖУ¬²¢·µ»ØµØÖ·£©¡£

6£¬Ö±½ÓÄڴ棨Direct Memory£©£ºÖ±½ÓÄÚ´æ²¢²»ÊÇJVM¹ÜÀíµÄÄڴ棬¿ÉÒÔÕâÑùÀí½â£¬Ö±½ÓÄڴ棬¾ÍÊÇJVMÒÔÍâµÄ»úÆ÷Äڴ棬±ÈÈ磬ÄãÓÐ4GµÄÄڴ棬JVMÕ¼ÓÃÁË1G£¬ÔòÆäÓàµÄ3G¾ÍÊÇÖ±½ÓÄڴ棬JDKÖÐÓÐÒ»ÖÖ»ùÓÚͨµÀ£¨Channel£©ºÍ»º³åÇø£¨Buffer£©µÄÄÚ´æ·ÖÅ䷽ʽ£¬½«ÓÉCÓïÑÔʵÏÖµÄnativeº¯Êý¿â·ÖÅäÔÚÖ±½ÓÄÚ´æÖУ¬Óô洢ÔÚJVM¶ÑÖеÄDirectByteBufferÀ´ÒýÓá£ÓÉÓÚÖ±½ÓÄÚ´æÊÕµ½±¾»úÆ÷ÄÚ´æµÄÏÞÖÆ£¬ËùÒÔÒ²¿ÉÄܳöÏÖOutOfMemoryErrorµÄÒì³£¡£

Java¶ÔÏóµÄ·ÃÎÊ·½Ê½

Ò»°ãÀ´Ëµ£¬Ò»¸öJavaµÄÒýÓ÷ÃÎÊÉæ¼°µ½3¸öÄÚ´æÇøÓò£ºJVMÕ»£¬¶Ñ£¬·½·¨Çø¡£

ÒÔ×î¼òµ¥µÄ±¾µØ±äÁ¿ÒýÓãºObject obj = new Object()ΪÀý£º

Object obj±íʾһ¸ö±¾µØÒýÓ㬴洢ÔÚJVMÕ»µÄ±¾µØ±äÁ¿±íÖУ¬±íʾһ¸öreferenceÀàÐÍÊý¾Ý£»

new Object()×÷ΪʵÀý¶ÔÏóÊý¾Ý´æ´¢ÔÚ¶ÑÖУ»

¶ÑÖл¹¼Ç¼ÁËObjectÀàµÄÀàÐÍÐÅÏ¢£¨½Ó¿Ú¡¢·½·¨¡¢field¡¢¶ÔÏóÀàÐ͵ȣ©µÄµØÖ·£¬ÕâЩµØÖ·ËùÖ´ÐеÄÊý¾Ý´æ´¢ÔÚ·½·¨ÇøÖУ»

ÔÚJavaÐéÄâ»ú¹æ·¶ÖУ¬¶ÔÓÚͨ¹ýreferenceÀàÐÍÒýÓ÷ÃÎʾßÌå¶ÔÏóµÄ·½Ê½²¢Î´×ö¹æ¶¨£¬Ä¿Ç°Ö÷Á÷µÄʵÏÖ·½Ê½Ö÷ÒªÓÐÁ½ÖÖ£º

1£¬Í¨¹ý¾ä±ú·ÃÎÊ£¨Í¼À´×ÔÓÚ¡¶ÉîÈëÀí½âJavaÐéÄâ»ú£ºJVM¸ß¼¶ÌØÐ§Óë×î¼ÑʵÏÖ¡·£©£º

ͨ¹ý¾ä±ú·ÃÎʵÄʵÏÖ·½Ê½ÖУ¬JVM¶ÑÖлáרÃÅÓÐÒ»¿éÇøÓòÓÃÀ´×÷Ϊ¾ä±ú³Ø£¬´æ´¢Ïà¹Ø¾ä±úËùÖ´ÐеÄʵÀýÊý¾ÝµØÖ·£¨°üÀ¨ÔÚ¶ÑÖеØÖ·ºÍÔÚ·½·¨ÇøÖеĵØÖ·£©¡£ÕâÖÖʵÏÖ·½·¨ÓÉÓÚÓþä±ú±íʾµØÖ·£¬Òò´ËÊ®·ÖÎȶ¨¡£

2£¬Í¨¹ýÖ±½ÓÖ¸Õë·ÃÎÊ£º£¨Í¼À´×ÔÓÚ¡¶ÉîÈëÀí½âJavaÐéÄâ»ú£ºJVM¸ß¼¶ÌØÐ§Óë×î¼ÑʵÏÖ¡·£©

ͨ¹ýÖ±½ÓÖ¸Õë·ÃÎʵķ½Ê½ÖУ¬referenceÖд洢µÄ¾ÍÊǶÔÏóÔÚ¶ÑÖеÄʵ¼ÊµØÖ·£¬ÔÚ¶ÑÖд洢µÄ¶ÔÏóÐÅÏ¢Öаüº¬ÁËÔÚ·½·¨ÇøÖеÄÏàÓ¦ÀàÐÍÊý¾Ý¡£ÕâÖÖ·½·¨×î´óµÄÓÅÊÆÊÇËٶȿ죬ÔÚHotSpotÐéÄâ»úÖÐÓõľÍÊÇÕâÖÖ·½Ê½¡£

JavaÄÚ´æ·ÖÅä»úÖÆ

ÕâÀïËù˵µÄÄÚ´æ·ÖÅ䣬Ö÷ÒªÖ¸µÄÊÇÔÚ¶ÑÉϵķÖÅ䣬һ°ãµÄ£¬¶ÔÏóµÄÄÚ´æ·ÖÅä¶¼ÊÇÔÚ¶ÑÉϽøÐУ¬µ«ÏÖ´ú¼¼ÊõÒ²Ö§³Ö½«¶ÔÏó²ð³É±êÁ¿ÀàÐÍ£¨±êÁ¿ÀàÐͼ´Ô­×ÓÀàÐÍ£¬±íʾµ¥¸öÖµ£¬¿ÉÒÔÊÇ»ù±¾ÀàÐÍ»òStringµÈ£©£¬È»ºóÔÚÕ»ÉÏ·ÖÅ䣬ÔÚÕ»ÉÏ·ÖÅäµÄºÜÉÙ¼û£¬ÎÒÃÇÕâÀï²»¿¼ÂÇ¡£

JavaÄÚ´æ·ÖÅäºÍ»ØÊյĻúÖÆ¸ÅÀ¨µÄ˵£¬¾ÍÊÇ£º·Ö´ú·ÖÅ䣬·Ö´ú»ØÊÕ¡£¶ÔÏ󽫸ù¾Ý´æ»îµÄʱ¼ä±»·ÖΪ£ºÄêÇá´ú£¨Young Generation£©¡¢ÄêÀÏ´ú£¨Old Generation£©¡¢ÓÀ¾Ã´ú£¨Permanent Generation£¬Ò²¾ÍÊÇ·½·¨Çø£©¡£ÈçÏÂͼ£¨À´Ô´ÓÚ¡¶³ÉΪJavaGCר¼Òpart I¡·£¬

ÄêÇá´ú£¨Young Generation£©£º¶ÔÏó±»´´½¨Ê±£¬ÄÚ´æµÄ·ÖÅäÊ×ÏÈ·¢ÉúÔÚÄêÇá´ú£¨´ó¶ÔÏó¿ÉÒÔÖ±½Ó±»´´½¨ÔÚÄêÀÏ´ú£©£¬´ó²¿·ÖµÄ¶ÔÏóÔÚ´´½¨ºóºÜ¿ì¾Í²»ÔÙʹÓã¬Òò´ËºÜ¿ì±äµÃ²»¿É´ï£¬ÓÚÊDZ»ÄêÇá´úµÄGC»úÖÆÇåÀíµô£¨IBMµÄÑо¿±íÃ÷£¬98%µÄ¶ÔÏó¶¼ÊǺܿìÏûÍöµÄ£©£¬Õâ¸öGC»úÖÆ±»³ÆÎªMinor GC»ò½ÐYoung GC¡£×¢Ò⣬Minor GC²¢²»´ú±íÄêÇá´úÄÚ´æ²»×㣬ËüÊÂʵÉÏÖ»±íʾÔÚEdenÇøÉϵÄGC¡£

ÄêÇá´úÉϵÄÄÚ´æ·ÖÅäÊÇÕâÑùµÄ£¬ÄêÇá´ú¿ÉÒÔ·ÖΪ3¸öÇøÓò£ºEdenÇø£¨ÒÁµéÔ°£¬Ñǵ±ºÍÏÄÍÞ͵³Ô½û¹ûÉúÍÞÍ޵ĵط½£¬ÓÃÀ´±íʾÄÚ´æÊ״ηÖÅäµÄÇøÓò£¬ÔÙÌùÇв»¹ý£©ºÍÁ½¸ö´æ»îÇø£¨Survivor 0 ¡¢Survivor 1£©¡£ÄÚ´æ·ÖÅä¹ý³ÌΪ£¨À´Ô´ÓÚ¡¶³ÉΪJavaGCר¼Òpart I¡·£º

1.¾ø´ó¶àÊý¸Õ´´½¨µÄ¶ÔÏó»á±»·ÖÅäÔÚEdenÇø£¬ÆäÖеĴó¶àÊý¶ÔÏóºÜ¿ì¾Í»áÏûÍö¡£EdenÇøÊÇÁ¬ÐøµÄÄÚ´æ¿Õ¼ä£¬Òò´ËÔÚÆäÉÏ·ÖÅäÄڴ漫¿ì£»

2.×î³õÒ»´Î£¬µ±EdenÇøÂúµÄʱºò£¬Ö´ÐÐMinor GC£¬½«ÏûÍöµÄ¶ÔÏóÇåÀíµô£¬²¢½«Ê£ÓàµÄ¶ÔÏó¸´ÖƵ½Ò»¸ö´æ»îÇøSurvivor0£¨´Ëʱ£¬Survivor1Êǿհ׵ģ¬Á½¸öSurvivor×ÜÓÐÒ»¸öÊǿհ׵ģ©£»

3.Ï´ÎEdenÇøÂúÁË£¬ÔÙÖ´ÐÐÒ»´ÎMinor GC£¬½«ÏûÍöµÄ¶ÔÏóÇåÀíµô£¬½«´æ»îµÄ¶ÔÏó¸´ÖƵ½Survivor1ÖУ¬È»ºóÇå¿ÕEdenÇø£»

4.½«Survivor0ÖÐÏûÍöµÄ¶ÔÏóÇåÀíµô£¬½«ÆäÖпÉÒÔ½ú¼¶µÄ¶ÔÏó½ú¼¶µ½OldÇø£¬½«´æ»îµÄ¶ÔÏóÒ²¸´ÖƵ½Survivor1Çø£¬È»ºóÇå¿ÕSurvivor0Çø£»

5.ÕâÖ»ÊǸö×î´óÖµ£¬²¢²»´ú±íÒ»¶¨ÊÇÕâ¸öÖµ£©Ö®ºó£¬ÈÔÈ»´æ»îµÄ¶ÔÏ󣍯äʵֻÓÐһС²¿·Ö£¬±ÈÈ磬ÎÒÃÇ×Ô¼º¶¨ÒåµÄ¶ÔÏ󣩣¬½«±»¸´ÖƵ½ÀÏÄê´ú¡£

´ÓÉÏÃæµÄ¹ý³Ì¿ÉÒÔ¿´³ö£¬EdenÇøÊÇÁ¬ÐøµÄ¿Õ¼ä£¬ÇÒSurvivor×ÜÓÐÒ»¸öΪ¿Õ¡£¾­¹ýÒ»´ÎGCºÍ¸´ÖÆ£¬Ò»¸öSurvivorÖб£´æ×ŵ±Ç°»¹»î×ŵĶÔÏ󣬶øEdenÇøºÍÁíÒ»¸öSurvivorÇøµÄÄÚÈݶ¼²»ÔÙÐèÒªÁË£¬¿ÉÒÔÖ±½ÓÇå¿Õ£¬µ½ÏÂÒ»´ÎGCʱ£¬Á½¸öSurvivorµÄ½ÇÉ«ÔÙ»¥»»¡£Òò´Ë£¬ÕâÖÖ·½Ê½·ÖÅäÄÚ´æºÍÇåÀíÄÚ´æµÄЧÂʶ¼¼«¸ß£¬ÕâÖÖÀ¬»ø»ØÊյķ½Ê½¾ÍÊÇÖøÃûµÄ¡°Í£Ö¹-¸´ÖÆ£¨Stop-and-copy£©¡±ÇåÀí·¨£¨½«EdenÇøºÍÒ»¸öSurvivorÖÐÈÔÈ»´æ»îµÄ¶ÔÏó¿½±´µ½ÁíÒ»¸öSurvivorÖУ©£¬Õâ²»´ú±í×ÅÍ£Ö¹¸´ÖÆÇåÀí·¨ºÜ¸ßЧ£¬Æäʵ£¬ËüÒ²Ö»ÔÚÕâÖÖÇé¿öϸßЧ£¬Èç¹ûÔÚÀÏÄê´ú²ÉÓÃÍ£Ö¹¸´ÖÆ£¬Ôòͦ±¯¾çµÄ¡£

ÔÚEdenÇø£¬HotSpotÐéÄâ»úʹÓÃÁËÁ½ÖÖ¼¼ÊõÀ´¼Ó¿ìÄÚ´æ·ÖÅä¡£·Ö±ðÊÇbump-the-pointerºÍTLAB£¨Thread-Local Allocation Buffers£©£¬ÕâÁ½ÖÖ¼¼ÊõµÄ×ö·¨·Ö±ðÊÇ£ºÓÉÓÚEdenÇøÊÇÁ¬ÐøµÄ£¬Òò´Ëbump-the-pointer¼¼ÊõµÄºËÐľÍÊǸú×Ù×îºó´´½¨µÄÒ»¸ö¶ÔÏó£¬ÔÚ¶ÔÏó´´½¨Ê±£¬Ö»ÐèÒª¼ì²é×îºóÒ»¸ö¶ÔÏóºóÃæÊÇ·ñÓÐ×ã¹»µÄÄÚ´æ¼´¿É£¬´Ó¶ø´ó´ó¼Ó¿ìÄÚ´æ·ÖÅäËÙ¶È£»¶ø¶ÔÓÚTLAB¼¼ÊõÊǶÔÓÚ¶àÏ̶߳øÑԵ쬽«EdenÇø·ÖΪÈô¸É¶Î£¬Ã¿¸öÏß³ÌʹÓöÀÁ¢µÄÒ»¶Î£¬±ÜÃâÏ໥ӰÏì¡£TLAB½áºÏbump-the-pointer¼¼Êõ£¬½«±£Ö¤Ã¿¸öÏ̶߳¼Ê¹ÓÃEdenÇøµÄÒ»¶Î£¬²¢¿ìËٵķÖÅäÄÚ´æ¡£

ÄêÀÏ´ú£¨Old Generation£©£º¶ÔÏóÈç¹ûÔÚÄêÇá´ú´æ»îÁË×ã¹»³¤µÄʱ¼ä¶øÃ»Óб»ÇåÀíµô£¨¼´ÔÚ¼¸´ÎYoung GCºó´æ»îÁËÏÂÀ´£©£¬Ôò»á±»¸´ÖƵ½ÄêÀÏ´ú£¬ÄêÀÏ´úµÄ¿Õ¼äÒ»°ã±ÈÄêÇá´ú´ó£¬ÄÜ´æ·Å¸ü¶àµÄ¶ÔÏó£¬ÔÚÄêÀÏ´úÉÏ·¢ÉúµÄGC´ÎÊýÒ²±ÈÄêÇá´úÉÙ¡£µ±ÄêÀÏ´úÄÚ´æ²»×ãʱ£¬½«Ö´ÐÐMajor GC£¬Ò²½Ð Full GC¡£

¿ÉÒÔʹÓÃ-XX:+UseAdaptiveSizePolicy¿ª¹ØÀ´¿ØÖÆÊÇ·ñ²ÉÓö¯Ì¬¿ØÖƲßÂÔ£¬Èç¹û¶¯Ì¬¿ØÖÆ£¬Ôò¶¯Ì¬µ÷ÕûJava¶ÑÖи÷¸öÇøÓòµÄ´óСÒÔ¼°½øÈëÀÏÄê´úµÄÄêÁä¡£

Èç¹û¶ÔÏó±È½Ï´ó£¨±ÈÈ糤×Ö·û´®»ò´óÊý×飩£¬Young¿Õ¼ä²»×㣬Ôò´ó¶ÔÏó»áÖ±½Ó·ÖÅäµ½ÀÏÄê´úÉÏ£¨´ó¶ÔÏó¿ÉÄÜ´¥·¢ÌáǰGC£¬Ó¦ÉÙÓ㬸üÓ¦±ÜÃâʹÓöÌÃüµÄ´ó¶ÔÏ󣩡£ÓÃ-XX:PretenureSizeThresholdÀ´¿ØÖÆÖ±½ÓÉýÈëÀÏÄê´úµÄ¶ÔÏó´óС£¬´óÓÚÕâ¸öÖµµÄ¶ÔÏó»áÖ±½Ó·ÖÅäÔÚÀÏÄê´úÉÏ¡£

¿ÉÄÜ´æÔÚÄêÀÏ´ú¶ÔÏóÒýÓÃÐÂÉú´ú¶ÔÏóµÄÇé¿ö£¬Èç¹ûÐèÒªÖ´ÐÐYoung GC£¬Ôò¿ÉÄÜÐèÒª²éѯÕû¸öÀÏÄê´úÒÔÈ·¶¨ÊÇ·ñ¿ÉÒÔÇåÀí»ØÊÕ£¬ÕâÏÔÈ»ÊǵÍЧµÄ¡£½â¾öµÄ·½·¨ÊÇ£¬ÄêÀÏ´úÖÐά»¤Ò»¸ö512 byteµÄ¿é¡ª¡ª¡±card table¡°£¬ËùÓÐÀÏÄê´ú¶ÔÏóÒýÓÃÐÂÉú´ú¶ÔÏóµÄ¼Ç¼¶¼¼Ç¼ÔÚÕâÀï¡£Young GCʱ£¬Ö»Òª²éÕâÀï¼´¿É£¬²»ÓÃÔÙÈ¥²éÈ«²¿ÀÏÄê´ú£¬Òò´ËÐÔÄÜ´ó´óÌá¸ß¡£

Java GC»úÖÆ

GC»úÖÆµÄ»ù±¾Ëã·¨ÊÇ£º·Ö´úÊÕ¼¯£¬Õâ¸ö²»ÓÃ׸Êö¡£ÏÂÃæ²ûÊöÿ¸ö·Ö´úµÄÊÕ¼¯·½·¨¡£

ÄêÇá´ú£º

ÊÂʵÉÏ£¬ÔÚÉÏÒ»½Ú£¬ÒѾ­½éÉÜÁËÐÂÉú´úµÄÖ÷ÒªÀ¬»ø»ØÊÕ·½·¨£¬ÔÚÐÂÉú´úÖУ¬Ê¹Óá°Í£Ö¹-¸´ÖÆ¡±Ëã·¨½øÐÐÇåÀí£¬½«ÐÂÉú´úÄÚ´æ·ÖΪ2²¿·Ö£¬1²¿·Ö EdenÇø½Ï´ó£¬1²¿·ÖSurvivor±È½ÏС£¬²¢±»»®·ÖΪÁ½¸öµÈÁ¿µÄ²¿·Ö¡£Ã¿´Î½øÐÐÇåÀíʱ£¬½«EdenÇøºÍÒ»¸öSurvivorÖÐÈÔÈ»´æ»îµÄ¶ÔÏó¿½±´µ½ ÁíÒ»¸öSurvivorÖУ¬È»ºóÇåÀíµôEdenºÍ¸Õ²ÅµÄSurvivor¡£

ÕâÀïÒ²¿ÉÒÔ·¢ÏÖ£¬Í£Ö¹¸´ÖÆËã·¨ÖУ¬ÓÃÀ´¸´ÖƵÄÁ½²¿·Ö²¢²»×ÜÊÇÏàµÈµÄ£¨´«Í³µÄÍ£Ö¹¸´ÖÆËã·¨Á½²¿·ÖÄÚ´æÏàµÈ£¬µ«ÐÂÉú´úÖÐʹÓÃ1¸ö´óµÄEdenÇøºÍ2¸öСµÄSurvivorÇøÀ´±ÜÃâÕâ¸öÎÊÌ⣩

ÓÉÓÚ¾ø´ó²¿·ÖµÄ¶ÔÏó¶¼ÊǶÌÃüµÄ£¬ÉõÖÁ´æ»î²»µ½SurvivorÖУ¬ËùÒÔ£¬EdenÇøÓëSurvivorµÄ±ÈÀý½Ï´ó£¬HotSpotĬÈÏÊÇ 8:1£¬¼´·Ö±ðÕ¼ÐÂÉú´úµÄ80%£¬10%£¬10%¡£Èç¹ûÒ»´Î»ØÊÕÖУ¬Survivor+EdenÖдæ»îÏÂÀ´µÄÄڴ泬¹ýÁË10%£¬ÔòÐèÒª½«Ò»²¿·Ö¶ÔÏó·ÖÅäµ½ ÀÏÄê´ú¡£ÓÃ-XX:SurvivorRatio²ÎÊýÀ´ÅäÖÃEdenÇøÓòSurvivorÇøµÄÈÝÁ¿±ÈÖµ£¬Ä¬ÈÏÊÇ8£¬´ú±íEden£ºSurvivor1£ºSurvivor2=8:1:1.

ÀÏÄê´ú£º

ÀÏÄê´ú´æ´¢µÄ¶ÔÏó±ÈÄêÇá´ú¶àµÃ¶à£¬¶øÇÒ²»·¦´ó¶ÔÏ󣬶ÔÀÏÄê´ú½øÐÐÄÚ´æÇåÀíʱ£¬Èç¹ûʹÓÃÍ£Ö¹-¸´ÖÆËã·¨£¬ÔòÏ൱µÍЧ¡£Ò»°ã£¬ÀÏÄê´úÓõÄËã·¨ÊDZê¼Ç-ÕûÀíËã·¨£¬¼´£º±ê¼Ç³öÈÔÈ»´æ»îµÄ¶ÔÏ󣨴æÔÚÒýÓõģ©£¬½«ËùÓдæ»îµÄ¶ÔÏóÏòÒ»¶ËÒÆ¶¯£¬ÒÔ±£Ö¤ÄÚ´æµÄÁ¬Ðø¡£

ÔÚ·¢ÉúMinor GCʱ£¬ÐéÄâ»ú»á¼ì²éÿ´Î½úÉý½øÈëÀÏÄê´úµÄ´óСÊÇ·ñ´óÓÚÀÏÄê´úµÄÊ£Óà¿Õ¼ä´óС£¬Èç¹û´óÓÚ£¬ÔòÖ±½Ó´¥·¢Ò»´ÎFull GC£¬·ñÔò£¬¾Í²é¿´ÊÇ·ñÉèÖÃÁË-XX:+HandlePromotionFailure£¨ÔÊÐíµ£±£Ê§°Ü£©£¬Èç¹ûÔÊÐí£¬ÔòÖ»»á½øÐÐMinorGC£¬´Ëʱ¿ÉÒÔÈÝÈÌÄÚ´æ·ÖÅäʧ°Ü£»Èç¹û²»ÔÊÐí£¬ÔòÈÔÈ»½øÐÐFull GC£¨Õâ´ú±í×ÅÈç¹ûÉèÖÃ-XX:+Handle PromotionFailure£¬Ôò´¥·¢MinorGC¾Í»áͬʱ´¥·¢Full GC£¬ÄÄÅÂÀÏÄê´ú»¹ÓкܶàÄڴ棬ËùÒÔ£¬×îºÃ²»ÒªÕâÑù×ö£©¡£

·½·¨Çø£¨ÓÀ¾Ã´ú£©£º

ÓÀ¾Ã´úµÄ»ØÊÕÓÐÁ½ÖÖ£º³£Á¿³ØÖеij£Á¿£¬ÎÞÓõÄÀàÐÅÏ¢£¬³£Á¿µÄ»ØÊպܼòµ¥£¬Ã»ÓÐÒýÓÃÁ˾ͿÉÒÔ±»»ØÊÕ¡£¶ÔÓÚÎÞÓõÄÀà½øÐлØÊÕ£¬±ØÐë±£Ö¤3µã£º

ÀàµÄËùÓÐʵÀý¶¼ÒѾ­±»»ØÊÕ

¼ÓÔØÀàµÄClassLoaderÒѾ­±»»ØÊÕ

Àà¶ÔÏóµÄClass¶ÔÏóûÓб»ÒýÓ㨼´Ã»ÓÐͨ¹ý·´ÉäÒýÓøÃÀàµÄµØ·½£©

ÓÀ¾Ã´úµÄ»ØÊÕ²¢²»ÊDZØÐëµÄ£¬¿ÉÒÔͨ¹ý²ÎÊýÀ´ÉèÖÃÊÇ·ñ¶ÔÀà½øÐлØÊÕ¡£HotSpotÌṩ-Xnoclassgc½øÐпØÖÆ

ʹÓÃ-verbose£¬-XX:+TraceClassLoading¡¢-XX:+TraceClassUnLoading¿ÉÒԲ鿴Àà¼ÓÔØºÍÐ¶ÔØÐÅÏ¢

-verbose¡¢-XX:+TraceClassLoading¿ÉÒÔÔÚProduct°æHotSpotÖÐʹÓã»

-XX:+TraceClassUnLoadingÐèÒªfastdebug°æHotSpotÖ§³Ö

À¬»øÊÕ¼¯Æ÷

ÔÚGC»úÖÆÖУ¬ÆðÖØÒª×÷ÓõÄÊÇÀ¬»øÊÕ¼¯Æ÷£¬À¬»øÊÕ¼¯Æ÷ÊÇGCµÄ¾ßÌåʵÏÖ£¬JavaÐéÄâ»ú¹æ·¶ÖжÔÓÚÀ¬»øÊÕ¼¯Æ÷ûÓÐÈκι涨£¬ËùÒÔ²»Í¬³§ÉÌʵÏÖµÄÀ¬»ø ÊÕ¼¯Æ÷¸÷²»Ïàͬ£¬HotSpot 1.6°æÊ¹ÓõÄÀ¬»øÊÕ¼¯Æ÷ÈçÏÂͼ£¨Í¼À´Ô´ÓÚ¡¶ÉîÈëÀí½âJavaÐéÄâ»ú£ºJVM¸ß¼¶ÌØÐ§Óë×î¼ÑʵÏÖ¡·£¬Í¼ÖÐÁ½¸öÊÕ¼¯Æ÷Ö®¼äÓÐÁ¬Ïߣ¬ËµÃ÷ËüÃÇ¿ÉÒÔÅäºÏʹÓã©£º

ÔÚ½éÉÜÀ¬»øÊÕ¼¯Æ÷֮ǰ£¬ÐèÒªÃ÷È·Ò»µã£¬¾ÍÊÇÔÚÐÂÉú´ú²ÉÓõÄÍ£Ö¹¸´ÖÆËã·¨ÖУ¬¡°Í£ Ö¹£¨Stop-the-world£©¡±µÄÒâÒåÊÇÔÚ»ØÊÕÄÚ´æÊ±£¬ÐèÒªÔÝÍ£ÆäËûËù ÓÐÏ̵߳ÄÖ´ÐС£Õâ¸öÊǺܵÍЧµÄ£¬ÏÖÔڵĸ÷ÖÖÐÂÉú´úÊÕ¼¯Æ÷Ô½À´Ô½ÓÅ»¯ÕâÒ»µã£¬µ«ÈÔȻֻÊǽ«Í£Ö¹µÄʱ¼ä±ä¶Ì£¬²¢Î´³¹µ×È¡ÏûÍ£Ö¹¡£

SerialÊÕ¼¯Æ÷£ºÐÂÉú´úÊÕ¼¯Æ÷£¬Ê¹ÓÃÍ£Ö¹¸´ÖÆËã·¨£¬Ê¹ÓÃÒ»¸öÏ߳̽øÐÐGC£¬´®ÐУ¬ÆäËü¹¤×÷Ïß³ÌÔÝÍ£¡£Ê¹ÓÃ-XX:+UseSerialGC¿ÉÒÔʹÓÃSerial+Serial OldģʽÔËÐнøÐÐÄÚ´æ»ØÊÕ£¨ÕâÒ²ÊÇÐéÄâ»úÔÚClientģʽÏÂÔËÐеÄĬÈÏÖµ£©

ParNewÊÕ¼¯Æ÷£ºÐÂÉú´úÊÕ¼¯Æ÷£¬Ê¹ÓÃÍ£Ö¹¸´ÖÆËã·¨£¬SerialÊÕ¼¯Æ÷µÄ¶àḬ̈߳棬Óöà¸öÏ߳̽øÐÐGC£¬²¢ÐУ¬ÆäËü¹¤×÷Ïß³ÌÔÝÍ££¬¹Ø×¢Ëõ¶ÌÀ¬»øÊÕ¼¯Ê±¼ä¡£Ê¹ÓÃ-XX:+UseParNewGC¿ª¹ØÀ´¿ØÖÆÊ¹ÓÃParNew+Serial OldÊÕ¼¯Æ÷×éºÏÊÕ¼¯Äڴ棻ʹÓÃ-XX:ParallelGCThreadsÀ´ÉèÖÃÖ´ÐÐÄÚ´æ»ØÊÕµÄÏß³ÌÊý¡£

Parallel Scavenge ÊÕ¼¯Æ÷£ºÐÂÉú´úÊÕ¼¯Æ÷£¬Ê¹ÓÃÍ£Ö¹¸´ÖÆËã·¨£¬¹Ø×¢CPUÍÌÍÂÁ¿£¬¼´ÔËÐÐÓû§´úÂëµÄʱ¼ä/×Üʱ¼ä£¬±ÈÈ磺JVMÔËÐÐ100·ÖÖÓ£¬ÆäÖÐÔËÐÐÓû§´úÂë99·ÖÖÓ£¬À¬ »øÊÕ¼¯1·ÖÖÓ£¬ÔòÍÌÍÂÁ¿ÊÇ99%£¬ÕâÖÖÊÕ¼¯Æ÷ÄÜ×î¸ßЧÂʵÄÀûÓÃCPU£¬ÊʺÏÔËÐкǫ́ÔËË㣨¹Ø×¢Ëõ¶ÌÀ¬»øÊÕ¼¯Ê±¼äµÄÊÕ¼¯Æ÷£¬ÈçCMS£¬µÈ´ýʱ¼äºÜÉÙ£¬ËùÒÔÊÊ ºÏÓû§½»»¥£¬Ìá¸ßÓû§ÌåÑ飩¡£Ê¹ÓÃ-XX:+UseParallelGC¿ª¹Ø¿ØÖÆÊ¹ÓÃParallel Scavenge+Serial OldÊÕ¼¯Æ÷×éºÏ»ØÊÕÀ¬»ø£¨ÕâÒ²ÊÇÔÚServerģʽϵÄĬÈÏÖµ£©£»Ê¹ÓÃ-XX:GCTimeRatioÀ´ÉèÖÃÓû§Ö´ÐÐʱ¼äÕ¼×Üʱ¼äµÄ±ÈÀý£¬Ä¬ÈÏ99£¬¼´1%µÄʱ¼äÓÃÀ´½øÐÐÀ¬»ø»ØÊÕ¡£Ê¹ÓÃ-XX:MaxGCPauseMillisÉèÖÃGCµÄ×î´óÍ£¶Ùʱ¼ä£¨Õâ¸ö²ÎÊýÖ»¶ÔParallel ScavengeÓÐЧ£©£¬Óÿª¹Ø²ÎÊý-XX:+UseAdaptiveSizePolicy¿ÉÒÔ½øÐж¯Ì¬¿ØÖÆ£¬Èç×Ô¶¯µ÷ÕûEden/Survivor±ÈÀý£¬ÀÏÄê´ú¶ÔÏóÄêÁ䣬ÐÂÉú´ú´óСµÈ£¬Õâ¸ö²ÎÊýÔÚParNewÏÂûÓС£

Serial OldÊÕ¼¯Æ÷£ºÀÏÄê´úÊÕ¼¯Æ÷£¬µ¥Ïß³ÌÊÕ¼¯Æ÷£¬´®ÐУ¬Ê¹Óñê¼ÇÕûÀí£¨ÕûÀíµÄ·½·¨ÊÇSweep£¨ÇåÀí£©ºÍCompact£¨Ñ¹Ëõ£©£¬ÇåÀíÊǽ«·ÏÆúµÄ¶ÔÏó¸Éµô£¬Ö»ÁôÐÒ´æµÄ¶ÔÏó£¬Ñ¹ËõÊǽ«Òƶ¯¶ÔÏ󣬽«¿Õ¼äÌîÂú±£Ö¤ÄÚ´æ·ÖΪ2¿é£¬Ò»¿éÈ«ÊǶÔÏó£¬Ò»¿é¿ÕÏУ©Ëã·¨£¬Ê¹Óõ¥Ï߳̽øÐÐGC£¬ÆäËü¹¤×÷Ïß³ÌÔÝÍ££¨×¢Ò⣬ÔÚÀÏÄê´úÖнøÐбê¼ÇÕûÀíËã·¨ÇåÀí£¬Ò²ÐèÒªÔÝÍ£ÆäËüỊ̈߳©£¬ÔÚJDK1.5֮ǰ£¬Serial OldÊÕ¼¯Æ÷ÓëParallelScavenge´îÅäʹÓá£

Parallel OldÊÕ¼¯Æ÷£ºÀÏÄê´úÊÕ¼¯Æ÷£¬¶àỊ̈߳¬²¢ÐУ¬¶àÏ̻߳úÖÆÓëParallel Scavenge²î²»´í£¬Ê¹Óñê¼ÇÕûÀí£¨ÓëSerial Old²»Í¬£¬ÕâÀïµÄÕûÀíÊÇSummary£¨»ã×Ü£©ºÍCompact£¨Ñ¹Ëõ£©£¬»ã×ܵÄÒâ˼¾ÍÊǽ«ÐÒ´æµÄ¶ÔÏó¸´ÖƵ½Ô¤ÏÈ×¼±¸ºÃµÄÇøÓò£¬¶ø²»ÊÇÏñSweep£¨ÇåÀí£©ÄÇÑùÇåÀí·ÏÆúµÄ¶ÔÏó£©Ëã·¨£¬ÔÚParallel OldÖ´ÐÐʱ£¬ÈÔÈ»ÐèÒªÔÝÍ£ÆäËüÏ̡߳£Parallel OldÔÚ¶àºË¼ÆËãÖкÜÓÐÓá£Parallel Old³öÏÖºó£¨JDK 1.6£©£¬ÓëParallel ScavengeÅäºÏÓкܺõÄЧ¹û£¬³ä·ÖÌåÏÖParallel ScavengeÊÕ¼¯Æ÷ÍÌÍÂÁ¿ÓÅÏȵÄЧ¹û¡£Ê¹ÓÃ-XX:+UseParallelOldGC¿ª¹Ø¿ØÖÆÊ¹ÓÃParallel Scavenge +Parallel Old×éºÏÊÕ¼¯Æ÷½øÐÐÊÕ¼¯¡£

CMS£¨Concurrent Mark Sweep£©ÊÕ¼¯Æ÷£ºÀÏÄê´úÊÕ¼¯Æ÷£¬ÖÂÁ¦ÓÚ»ñÈ¡×î¶Ì»ØÊÕÍ£¶Ùʱ¼ä£¨¼´Ëõ¶ÌÀ¬»ø»ØÊÕµÄʱ¼ä£©£¬Ê¹Óñê¼ÇÇå³ýËã·¨£¬¶àỊ̈߳¬ÓŵãÊDz¢·¢ÊÕ¼¯£¨Óû§Ï߳̿ÉÒÔºÍGCÏß³Ìͬʱ¹¤×÷£©£¬Í£¶ÙС¡£Ê¹ÓÃ-XX:+UseConcMarkSweepGC½øÐÐParNew+CMS+Serial Old½øÐÐÄÚ´æ»ØÊÕ£¬ÓÅÏÈʹÓÃParNew+CMS£¨Ô­Òò¼ûºóÃæ£©£¬µ±Óû§Ïß³ÌÄÚ´æ²»×ãʱ£¬²ÉÓñ¸Ó÷½°¸Serial OldÊÕ¼¯¡£

CMSÊÕ¼¯µÄÖ´Ðйý³ÌÊÇ£º³õʼ±ê¼Ç(CMS-initial-mark) -> ²¢·¢±ê¼Ç(CMS-concurrent-mark) -->Ô¤ÇåÀí(CMS-concurrent-preclean)¨C>¿É¿ØÔ¤ÇåÀí(CMS-concurrent-abortable-preclean)-> ÖØÐ±ê¼Ç(CMS-remark) -> ²¢·¢Çå³ý(CMS-concurrent-sweep) ->²¢·¢ÖØÉè״̬µÈ´ýÏ´ÎCMSµÄ´¥·¢(CMS-concurrent-reset)

¾ßÌåµÄ˵£¬ÏÈ2´Î±ê¼Ç£¬1´ÎÔ¤ÇåÀí£¬1´ÎÖØÐ±ê¼Ç£¬ÔÙ1´ÎÇå³ý¡£

1£¬Ê×ÏÈjvm¸ù¾Ý-XX:CMSInitiatingOccupancyFraction£¬-XX:+UseCMSInitiatingOccupancyOnlyÀ´¾ö¶¨Ê²Ã´Ê±¼ä¿ªÊ¼À¬»øÊÕ¼¯£»

2£¬Èç¹ûÉèÖÃÁË-XX:+UseCMSInitiatingOccupancyOnly£¬ÄÇôֻÓе±old´úÕ¼ÓÃȷʵ´ïµ½ÁË-XX:CMSInitiatingOccupancyFraction²ÎÊýËùÉ趨µÄ±ÈÀýʱ²Å»á´¥·¢cms gc£»

3£¬Èç¹ûûÓÐÉèÖÃ-XX:+UseCMSInitiatingOccupancyOnly£¬ÄÇôϵͳ»á¸ù¾Ýͳ¼ÆÊý¾Ý×ÔÐоö¶¨Ê²Ã´Ê±ºò´¥·¢cms gc£»Òò´ËÓÐʱ»áÓöµ½ÉèÖÃÁË80%±ÈÀý²Åcms gc£¬µ«ÊÇ50%ʱ¾ÍÒѾ­´¥·¢ÁË£¬¾ÍÊÇÒòΪÕâ¸ö²ÎÊýûÓÐÉèÖõÄÔ­Òò£»

4£¬µ±cms gc¿ªÊ¼Ê±£¬Ê×ÏȵĽ׶ÎÊdzõʼ±ê¼Ç(CMS-initial-mark)£¬ÊÇstop the world½×¶Î£¬Òò´Ë´Ë½×¶Î±ê¼ÇµÄ¶ÔÏóÖ»ÊÇ´Óroot¼¯×îÖ±½Ó¿É´ïµÄ¶ÔÏó£»

CMS-initial-mark£º961330K£¨1572864K£©£¬Ö¸±ê¼Çʱ£¬old´úµÄÒÑÓÿռäºÍ×ܿռä

5£¬ÏÂÒ»¸ö½×¶ÎÊDz¢·¢±ê¼Ç(CMS-concurrent-mark)£¬´Ë½×¶ÎÊǺÍÓ¦ÓÃÏ̲߳¢·¢Ö´Ðеģ¬Ëùν²¢·¢ÊÕ¼¯Æ÷Ö¸µÄ¾ÍÊÇÕâ¸ö£¬Ö÷Òª×÷ÓÃÊDZê¼Ç¿É´ïµÄ¶ÔÏ󣬴˽׶β»ÐèÒªÓû§Í£¶Ù¡£

´Ë½×¶Î»á´òÓ¡2ÌõÈÕÖ¾£ºCMS-concurrent-mark-start£¬CMS-concurrent-mark

6£¬ÏÂÒ»¸ö½×¶ÎÊÇCMS-concurrent-preclean£¬´Ë½×¶ÎÖ÷ÒªÊǽøÐÐһЩԤÇåÀí£¬ÒòΪ±ê¼ÇºÍÓ¦ÓÃÏß³ÌÊDz¢·¢Ö´Ðеģ¬Òò´Ë»áÓÐЩ¶ÔÏóµÄ״̬ÔÚ±ê¼Çºó»á¸Ä±ä£¬´Ë½×¶ÎÕýÊǽâ¾öÕâ¸öÎÊÌâÒòΪ֮ºóµÄRescan½×¶ÎÒ²»ástop the world£¬ÎªÁËʹÔÝÍ£µÄʱ¼ä¾¡¿ÉÄܵÄС£¬Ò²ÐèÒªpreclean½×¶ÎÏÈ×öÒ»²¿·Ö¹¤×÷ÒÔ½Úʡʱ¼ä

´Ë½×¶Î»á´òÓ¡2ÌõÈÕÖ¾£ºCMS-concurrent-preclean-start£¬CMS-concurrent-preclean

7£¬ÏÂÒ»½×¶ÎÊÇCMS-concurrent-abortable-preclean½×¶Î£¬¼ÓÈë´Ë½×¶ÎµÄÄ¿µÄÊÇʹcms gc¸ü¼Ó¿É¿ØÒ»Ð©£¬×÷ÓÃÒ²ÊÇÖ´ÐÐһЩԤÇåÀí£¬ÒÔ¼õÉÙRescan½×¶ÎÔì³ÉÓ¦ÓÃÔÝÍ£µÄʱ¼ä

´Ë½×¶ÎÉæ¼°¼¸¸ö²ÎÊý£º

-XX:CMSMaxAbortablePrecleanTime£ºµ±abortable-preclean½×¶ÎÖ´ÐдﵽÕâ¸öʱ¼äʱ²Å»á½áÊø

-XX:CMSScheduleRemarkEdenSizeThreshold£¨Ä¬ÈÏ2m£©£º¿ØÖÆabortable-preclean½×¶Îʲôʱºò¿ªÊ¼Ö´ÐУ¬

¼´µ±edenʹÓôﵽ´Ëֵʱ£¬²Å»á¿ªÊ¼abortable-preclean½×¶Î

-XX:CMSScheduleRemarkEdenPenetratio£¨Ä¬ÈÏ50%£©£º¿ØÖÆabortable-preclean½×¶Îʲôʱºò½áÊøÖ´ÐÐ

´Ë½×¶Î»á´òӡһЩÈÕÖ¾ÈçÏ£º

CMS-concurrent-abortable-preclean-start£¬CMS-concurrent-abortable-preclean£¬

CMS£ºabort preclean due to time XXX

8£¬ÔÙÏÂÒ»¸ö½×¶ÎÊǵڶþ¸östop the world½×¶ÎÁË£¬¼´Rescan½×¶Î£¬´Ë½×¶ÎÔÝÍ£Ó¦ÓÃỊ̈߳¬Í£¶Ùʱ¼ä±È²¢·¢±ê¼ÇСµÃ¶à£¬µ«±È³õʼ±ê¼ÇÉÔ³¤¡£¶Ô¶ÔÏó½øÐÐÖØÐÂɨÃè²¢±ê¼Ç£»

YG occupancy£º964861K£¨2403008K£©£¬Ö¸Ö´ÐÐʱyoung´úµÄÇé¿ö

CMS remark£º961330K£¨1572864K£©£¬Ö¸Ö´ÐÐʱold´úµÄÇé¿ö

´ËÍ⣬»¹´òÓ¡³öÁËÈõÒýÓô¦Àí¡¢ÀàÐ¶ÔØµÈ¹ý³ÌµÄºÄʱ

9£¬ÔÙÏÂÒ»¸ö½×¶ÎÊÇCMS-concurrent-sweep£¬½øÐв¢·¢µÄÀ¬»øÇåÀí

10£¬×îºóÊÇCMS-concurrent-reset£¬ÎªÏÂÒ»´Îcms gcÖØÖÃÏà¹ØÊý¾Ý½á¹¹

ÓÐ2ÖÖÇé¿ö»á´¥·¢CMS µÄ±¯¹Ûfull gc£¬ÔÚ±¯¹Ûfull gcʱ£¬Õû¸öÓ¦ÓûáÔÝÍ£

A£¬concurrent-mode-failure£ºÔ¤ÇåÀí½×¶Î¿ÉÄܳöÏÖ£¬µ±cms gcÕý½øÐÐʱ£¬´ËʱÓÐеĶÔÏóÒª½øÐÐold´ú£¬µ«ÊÇold´ú¿Õ¼ä²»×ãÔì³ÉµÄ¡£Æä¿ÉÄÜÐÔÓУº1£¬OÇø¿Õ¼ä²»×ãÒÔÈÃÐÂÉú´ú½ú¼¶£¬2£¬OÇø¿Õ¼äÓÃÍê֮ǰ£¬ÎÞ·¨Íê³É¶ÔÎÞÒýÓõĶÔÏóµÄÇåÀí¡£Õâ±íÃ÷£¬µ±Ç°ÓдóÁ¿Êý¾Ý½øÈëÄÚ´æÇÒÎÞ·¨ÊÍ·Å¡£

B£¬promotion-failed£ºÐÂÉú´úyoung gc¿ÉÄܳöÏÖ£¬µ±½øÐÐyoung gcʱ£¬Óв¿·Öyoung´ú¶ÔÏóÈÔÈ»¿ÉÓ㬵«ÊÇS1»òS2·Å²»Ï£¬Òò´ËÐèÒª·Åµ½old´ú£¬µ«´Ëʱold´ú¿Õ¼äÎÞ·¨ÈÝÄÉ´Ë¡£

Ó°Ïìcms gcʱ³¤¼°´¥·¢µÄ²ÎÊýÊÇÒÔÏÂ2¸ö£º

-XX:CMSMaxAbortablePrecleanTime=5000

-XX:CMSInitiatingOccupancyFraction=80

½â¾öÒ²ÊÇÕë¶ÔÕâÁ½¸ö²ÎÊýÀ´µÄ£¬¸ù±¾µÄÔ­ÒòÊÇÿ´ÎÇëÇóÏûºÄµÄÄÚ´æÁ¿¹ý´ó

½â¾ö·½Ê½£º

A£¬Õë¶Ôcms gcµÄ´¥·¢½×¶Î£¬µ÷Õû-XX:CMSInitiatingOccupancyFraction=50£¬ÌáÔç´¥·¢cms gc£¬¾Í¿ÉÒÔ»º½âµ±old´ú´ïµ½80%£¬cms gc´¦Àí²»Í꣬´Ó¶øÔì³Éconcurrent mode failureÒý·¢full gc

B£¬ÐÞ¸Ä-XX:CMSMaxAbortablePrecleanTime=500£¬ËõСCMS-concurrent-abortable-preclean½×¶ÎµÄʱ¼ä

C£¬¿¼Âǵ½cms gcʱ²»»á½øÐÐcompact£¬Òò´Ë¼ÓÈë-XX:+UseCMSCompactAtFullCollection

£¨cms gcºó»á½øÐÐÄÚ´æµÄcompact£©ºÍ-XX:CMSFullGCsBeforeCompaction=4£¨ÔÚfull gc4´Îºó»á½øÐÐcompact£©²ÎÊý

ÔÚCMSÇåÀí¹ý³ÌÖУ¬Ö»Óгõʼ±ê¼ÇºÍÖØÐ±ê¼ÇÐèÒª¶ÌÔÝÍ£¶Ù£¬²¢·¢±ê¼ÇºÍ²¢·¢Çå³ý¶¼²»ÐèÒªÔÝÍ£Óû§Ị̈߳¬Òò´ËЧÂʺܸߣ¬ºÜÊʺϸ߽»»¥µÄ³¡ºÏ¡£

CMSÒ²ÓÐȱµã£¬ËüÐèÒªÏûºÄ¶îÍâµÄCPUºÍÄÚ´æ×ÊÔ´£¬ÔÚCPUºÍÄÚ´æ×ÊÔ´½ôÕÅ£¬CPU½ÏÉÙʱ£¬»á¼ÓÖØÏµÍ³¸ºµ££¨CMSĬÈÏÆô¶¯Ïß³ÌÊýΪ(CPUÊýÁ¿+3)/4£©¡£

ÁíÍ⣬ÔÚ²¢·¢ÊÕ¼¯¹ý³ÌÖУ¬Óû§Ïß³ÌÈÔÈ»ÔÚÔËÐУ¬ÈÔÈ»²úÉúÄÚ´æÀ¬»ø£¬ËùÒÔ¿ÉÄܲúÉú¡°¸¡¶¯À¬»ø¡±£¬±¾´ÎÎÞ·¨ÇåÀí£¬Ö»ÄÜÏÂÒ»´ÎFull GC²ÅÇåÀí£¬Òò´ËÔÚGCÆÚ¼ä£¬ÐèÒªÔ¤Áô×ã¹»µÄÄÚ´æ¸øÓû§Ïß³ÌʹÓá£ËùÒÔʹÓÃCMSµÄÊÕ¼¯Æ÷²¢²»ÊÇÀÏÄê´úÂúÁ˲Ŵ¥·¢Full GC£¬¶øÊÇÔÚʹÓÃÁËÒ»´ó°ë£¨Ä¬ÈÏ68%£¬¼´2/3£¬Ê¹ÓÃ-XX:CMSInitiatingOccupancyFractionÀ´ÉèÖ㩵Äʱºò¾ÍÒª½øÐÐFull GC£¬Èç¹ûÓû§Ïß³ÌÏûºÄÄÚ´æ²»ÊÇÌØ±ð´ó£¬¿ÉÒÔÊʵ±µ÷¸ß-XX:CMSInitiatingOccupancyFractionÒÔ½µµÍGC´ÎÊý£¬Ìá¸ßÐÔÄÜ£¬Èç¹ûÔ¤ÁôµÄÓû§Ïß³ÌÄÚ´æ²»¹»£¬Ôò»á´¥·¢Concurrent Mode Failure£¬´Ëʱ£¬½«´¥·¢±¸Ó÷½°¸£ºÊ¹ÓÃSerial Old ÊÕ¼¯Æ÷½øÐÐÊÕ¼¯£¬µ«ÕâÑùÍ£¶Ùʱ¼ä¾Í³¤ÁË£¬Òò´Ë-XX:CMSInitiatingOccupancyFraction²»ÒËÉèµÄ¹ý´ó¡£

»¹ÓУ¬CMS²ÉÓõÄÊDZê¼ÇÇå³ýËã·¨£¬»áµ¼ÖÂÄÚ´æË鯬µÄ²úÉú£¬¿ÉÒÔʹÓÃ-XX£º+UseCMSCompactAtFullCollectionÀ´ÉèÖÃÊÇ·ñÔÚFull GCÖ®ºó½øÐÐË鯬ÕûÀí£¬ÓÃ-XX£ºCMSFullGCsBeforeCompactionÀ´ÉèÖÃÔÚÖ´ÐжàÉٴβ»Ñ¹ËõµÄFull GCÖ®ºó£¬À´Ò»´Î´øÑ¹ËõµÄFull GC¡£

G1ÊÕ¼¯Æ÷£ºÔÚJDK1.7ÖÐÕýʽ·¢²¼£¬ÓëÏÖ×´µÄÐÂÉú´ú¡¢ÀÏÄê´ú¸ÅÄîÓкܴó²»Í¬£¬Ä¿Ç°Ê¹ÓýÏÉÙ£¬²»×ö½éÉÜ¡£

×¢Òâ²¢·¢£¨Concurrent£©ºÍ²¢ÐУ¨Parallel£©µÄÇø±ð£º

²¢·¢ÊÇÖ¸Óû§Ïß³ÌÓëGCÏß³ÌͬʱִÐУ¨²»Ò»¶¨ÊDz¢ÐУ¬¿ÉÄܽ»Ì棬µ«×ÜÌåÉÏÊÇÔÚͬʱִÐеģ©£¬²»ÐèҪͣ¶ÙÓû§Ị̈߳¨ÆäʵÔÚCMSÖÐÓû§Ï̻߳¹ÊÇÐèҪͣ¶ÙµÄ£¬Ö»ÊǷdz£¶Ì£¬GCÏß³ÌÔÚÁíÒ»¸öCPUÉÏÖ´ÐУ©£»

²¢ÐÐÊÕ¼¯ÊÇÖ¸¶à¸öGCÏ̲߳¢Ðй¤×÷£¬µ«´ËʱÓû§Ïß³ÌÊÇÔÝÍ£µÄ£»

ËùÒÔ£¬SerialÊÇ´®Ðеģ¬ParallelÊÕ¼¯Æ÷ÊDz¢Ðе쬶øCMSÊÕ¼¯Æ÷ÊDz¢·¢µÄ.

   
1666 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö