±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcnblogs£¬½éÉÜÁËJavaÔËÐÐʱÊý¾ÝÇø£¬¶ÔÏó¡°ÒÑËÀ¡±µÄÅж¨Ëã·¨£¬À¬»øÊÕ¼¯Ëã·¨£¬À¬»øÊÕ¼¯Æ÷¡£ |
|
Java×Ô¶¯ÄÚ´æ¹ÜÀí»úÖÆ°üº¬Á½²¿·Ö£ºÄÚ´æ·ÖÅäºÍÄÚ´æ»ØÊÕ£¬ÒªÏëÀí½âÄÚ´æ·ÖÅäºÍ»ØÊյĻúÖÆ£¬ÔòÐèÒªÁ˽âÏÂJavaÄÚ´æÇøÓò£¨JavaÔËÐÐʱÊý¾ÝÇø£©£¬ÕâÆªËæ±Ê½«°´ÕÕÏÂÃæµÄÏßË÷½øÐÐÖð²½½âÎö£º
1.JavaÔËÐÐʱÊý¾ÝÇø
2.¶ÔÏó¡°ÒÑËÀ¡±µÄÅж¨Ëã·¨
3.À¬»øÊÕ¼¯Ëã·¨
4.À¬»øÊÕ¼¯Æ÷
5.½áÊøÓï
ºÃ£¬½ÓÏÂÀ´ÎÒÃÇÒ»Ò»À´¿´¡£
Ò»¡¢JavaÔËÐÐʱÊý¾ÝÇø
¸ù¾Ý¡¶JavaÐéÄâ»ú¹æ·¶¡·µÄ¹æ¶¨£¬JavaÐéÄâ»úËù¹ÜÀíµÄÄڴ潫»á°üÀ¨Èçϼ¸¸öÔËÐÐʱÊý¾ÝÇøÓò

³ÌÐò¼ÆÊýÆ÷£ºÓÃÀ´¼Ç¼µ±Ç°Ïß³ÌËùÖ´ÐеÄ×Ö½ÚÂëÖ¸ÁîµÄÐкÅָʾÆ÷¡£×Ö½ÚÂë¼ÆÊ±Æ÷ÐèҪͨ¹ý¸Ä±ä¸ÄÖµÀ´Ñ¡È¡ÏÂÒ»ÌõÐèÒªÖ´ÐеÄ×Ö½ÚÂëÖ¸¶¨£¬·ÖÖ§¡¢Ñ»·¡¢Ìø×ª¡¢Òì³£´¦Àí¡¢Ïָ̻߳´µÈ»ù´¡¹¦Äܶ¼ÐèÒªÒÀÀµÕâ¸öָʾÆ÷À´Íê³É¡£³ÌÐò¼ÆÊýÆ÷ÊÇΨһһ¸öûÓй涨ÈκÎOutOfMemoryErrorÇé¿öµÄÇøÓò¡£
JavaÐéÄâ»úÕ»£ºÐéÄâ»úÕ»ÃèÊöµÄÊÇJava·½·¨Ö´ÐеÄÄÚ´æÄ£ÐÍ£¬Ã¿¸ö·½·¨Ö´ÐÐʱ¶¼»á´´½¨Ò»¸öÕ»Ö¡ÓÃÀ´´æ´¢¾Ö²¿±äÁ¿±í£¨´æ·Å±àÒëÆ÷¿ÉÖªµÄ¸÷ÖÖ»ù±¾Êý¾ÝÀàÐÍ¡¢¶ÔÏóÒýÓúÍreturnAddressÀàÐÍ£¬ËùÐèµÄÄÚ´æ¿Õ¼äÔÚ±àÒëÆ÷Íê³É·ÖÅ䣩¡¢²Ù×÷ÊýÕ»¡¢¶¯Ì¬Á´½Ó¡¢·½·¨³ö¿ÚµÈÐÅÏ¢¡£JavaÐéÄâ»úÕ»ÓÐÁ½ÖÖÒì³£Çé¿ö£ºOutOfMemoryError£¨À©Õ¹Ê±ÎÞ·¨ÉêÇëµ½×ã¹»Äڴ棩ºÍStackOverflowError£¨Ïß³ÌÇëÇóµÄÕ»Éî¶È´óÓÚÐéÄâ»úËùÔÊÐíµÄÉî¶È£©¡£
±¾µØ·½·¨Õ»£ºÍ¬JavaÐéÄâ»úÕ»ÀàËÆ£¬Ö»²»¹ýJavaÐéÄâ»úջΪÐéÄâ»úÖ´ÐÐJava·½·¨·þÎñ£¬±¾µØ·½·¨Õ»ÎªÐéÄâ»úʹÓÃNative·½·¨·þÎñ¡£HotSpotÖ±½Ó½«Á½¸öÕ»ºÏ¶þΪһ¡£Ò²¹æ¶¨ÁËÁ½ÖÖÒì³££ºOutOfMemoryErrorºÍStackOverflowError¡£
¶Ñ£ºJVMËù¹ÜÀíµÄÄÚ´æÖÐ×î´óµÄÒ»¿é£¬Ò²ÊÇGC¹ÜÀíµÄÖ÷񻂿Óò¡£ÀíÂÛÉÏËùÓеĶÔÏóʵÀýºÍÊý×é¶¼ÒªÔÚ¶ÑÉÏ·ÖÅä¡£¶ÑµÄ´óСÊÇ¿ÉÒÔÀ©Õ¹µÄ£¬Í¨¹ý-XmsºÍ-Xms¿ØÖÆ£¬²¢ÇÒ¶ÑÎÞ·¨À©Õ¹µÄʱºò¾Í»á±¨OutOfMemoryErrorÒì³£¡£
·½·¨Çø£ºÓÃÀ´´æ´¢JVM¼ÓÔØµÄÀàÐÅÏ¢¡¢³£Á¿¡¢¾²Ì¬±äÁ¿¡¢¼´Ê±±àÒëÆ÷±àÒëºóµÄ´úÂëµÈÊý¾Ý¡£ËäÈ»JavaÐéÄâ»ú¹æ·¶°Ñ·½·¨ÇøÃèÊöΪ¶ÑµÄÒ»¸öÂß¼²¿·Ö£¬µ«ÊÇΪÁ˺ͶÑÇø·Ö¿ªÀ´£¬ËüÒ²½ÐNon-Heap£¨·Ç¶Ñ£©¡£·½·¨ÇøÎÞ·¨Âú×ãÄÚ´æ·ÖÅäÐèÇóʱ£¬±¨OutOfMemoryErrorÒì³£¡£
Ö±½ÓÄڴ棺²¢²»ÊÇÐéÄâ»úÔËÐÐʱÊý¾ÝÇøµÄÒ»²¿·Ö£¬Ò²²»ÊÇJVM¹æ·¶Öж¨ÒåµÄÄÚ´æÇøÓò£¬µ«ÊÇÈ´±»¾³£Ê¹Óá£JDK1.4ÖÐмÓÈëµÄNIOÀ࣬ÒýÈëÁË»ùÓÚͨµÀºÍ»º³åÇøµÄI/O·½Ê½£¬Ëû¿ÉÒÔÖ±½Ó·ÖÅä¶ÔÍâÄڴ棬ÒÔÌá¸ßÐÔÄÜ¡£²»ÊÕ¶Ñ´óСµÄÏÞÖÆ£¬µ«ÊÇ»áÊÜÎïÀíÄÚ´æµÄÔ¼Êø¡£Ò²»á±¨OutOfMemoryErrorÒì³£¡£
¸½Õ»µ½¶ÑµÄ¹ØÁªÀý×Ó£¨»ùÓÚHotSpot£©£º

¶þ¡¢¶ÔÏó¡°ÒÑËÀ¡±µÄÅж¨Ëã·¨
ÓÉÓÚ³ÌÐò¼ÆÊýÆ÷¡¢JavaÐéÄâ»úÕ»¡¢±¾µØ·½·¨Õ»¶¼ÊÇÏ̶߳ÀÏí£¬ÆäÕ¼ÓõÄÄÚ´æÒ²ÊÇËæÏß³ÌÉú¶øÉú¡¢ËæÏ߳̽áÊø¶ø»ØÊÕ¡£¶øJava¶ÑºÍ·½·¨ÇøÔò²»Í¬£¬Ï̹߳²Ïí£¬ÊÇGCµÄËù¹Ø×¢µÄ²¿·Ö¡£
ÔÚ¶ÑÖм¸ºõ´æÔÚ×ÅËùÓжÔÏó£¬GC֮ǰÐèÒª¿¼ÂÇÄÄЩ¶ÔÏó»¹»î×Ų»ÄÜ»ØÊÕ£¬ÄÄЩ¶ÔÏóÒѾËÀÈ¥¿ÉÒÔ»ØÊÕ¡£
ÓÐÁ½ÖÖËã·¨¿ÉÒÔÅж¨¶ÔÏóÊÇ·ñ´æ»î£º
1.£©ÒýÓüÆÊýËã·¨£º¸ø¶ÔÏóÖÐÌí¼ÓÒ»¸öÒýÓüÆÊýÆ÷£¬Ã¿µ±Ò»¸öµØ·½Ó¦ÓÃÁ˶ÔÏ󣬼ÆÊýÆ÷¼Ó1£»µ±ÒýÓÃʧЧ£¬¼ÆÊýÆ÷¼õ1£»µ±¼ÆÊýÆ÷Ϊ0±íʾ¸Ã¶ÔÏóÒÑËÀ¡¢¿É»ØÊÕ¡£µ«ÊÇËüºÜÄѽâ¾öÁ½¸ö¶ÔÏóÖ®¼äÏ໥ѻ·ÒýÓõÄÇé¿ö¡£
2.£©¿É´ïÐÔ·ÖÎöËã·¨£ºÍ¨¹ýһϵÁгÆÎª¡°GC Roots¡±µÄ¶ÔÏó×÷ΪÆðµã£¬´ÓÕâЩ½Úµã¿ªÊ¼ÏòÏÂËÑË÷£¬ËÑË÷Ëù×ß¹ýµÄ·¾¶³ÆÎªÒýÓÃÁ´£¬µ±Ò»¸ö¶ÔÏóµ½GC
RootsûÓÐÈκÎÒýÓÃÁ´ÏàÁ¬£¨¼´¶ÔÏóµ½GC Roots²»¿É´ï£©£¬ÔòÖ¤Ã÷´Ë¶ÔÏóÒÑËÀ¡¢¿É»ØÊÕ¡£JavaÖпÉÒÔ×÷ΪGC
RootsµÄ¶ÔÏó°üÀ¨£ºÐéÄâ»úÕ»ÖÐÒýÓõĶÔÏó¡¢±¾µØ·½·¨Õ»ÖÐNative·½·¨ÒýÓõĶÔÏó¡¢·½·¨Çø¾²Ì¬ÊôÐÔÒýÓõĶÔÏó¡¢·½·¨Çø³£Á¿ÒýÓõĶÔÏó¡£
ÔÚÖ÷Á÷µÄÉÌÓóÌÐòÓïÑÔ£¨ÈçÎÒÃǵÄJava£©µÄÖ÷Á÷ʵÏÖÖУ¬¶¼ÊÇͨ¹ý¿É´ïÐÔ·ÖÎöËã·¨À´Åж¨¶ÔÏóÊÇ·ñ´æ»îµÄ¡£
Èý¡¢À¬»øÊÕ¼¯Ëã·¨
1¡¢±ê¼Ç-Çå³ýËã·¨
×î»ù´¡µÄËã·¨£¬·Ö±ê¼ÇºÍÇå³ýÁ½¸ö½×¶Î£ºÊ×Ïȱê¼Ç´¦ËùÐèÒª»ØÊյĶÔÏó£¬ÔÚ±ê¼ÇÍê³Éºóͳһ»ØÊÕËùÓб»±ê¼ÇµÄ¶ÔÏó¡£
ËüÓÐÁ½µã²»×㣺һ¸öЧÂÊÎÊÌ⣬±ê¼ÇºÍÇå³ý¹ý³Ì¶¼Ð§Âʲ»¸ß£»Ò»¸öÊǿռäÎÊÌ⣬±ê¼ÇÇå³ýÖ®ºó»á²úÉú´óÁ¿²»Á¬ÐøµÄÄÚ´æË鯬£¨ÀàËÆÓÚÎÒÃǵçÄԵĴÅÅÌË鯬£©£¬¿Õ¼äËéÆ¬Ì«¶àµ¼ÖÂÐèÒª·ÖÅä´ó¶ÔÏóʱÎÞ·¨ÕÒµ½×ã¹»µÄÁ¬ÐøÄÚ´æ¶ø²»µÃ²»Ìáǰ´¥·¢ÁíÒ»´ÎÀ¬»ø»ØÊÕ¶¯×÷¡£

2¡¢¸´ÖÆËã·¨
ΪÁ˽â¾öЧÂÊÎÊÌ⣬³öÏÖÁË¡°¸´ÖÆ¡±Ëã·¨£¬Ëû½«¿ÉÓÃÄÚ´æ°´ÈÝÁ¿»®·ÖΪ´óСÏàµÈµÄÁ½¿é£¬Ã¿´ÎÖ»ÐèҪʹÓÃÆäÖÐÒ»¿é¡£µ±Ò»¿éÄÚ´æÓÃÍêÁË£¬½«»¹´æ»îµÄ¶ÔÏó¸´ÖƵ½ÁíÒ»¿éÉÏÃæ£¬È»ºóÔٰѸոÕÓÃÍêµÄÄÚ´æ¿Õ¼äÒ»´ÎÇåÀíµô¡£ÕâÑù¾Í½â¾öÁËÄÚ´æË鯬ÎÊÌ⣬µ«ÊÇ´ú¼Û¾ÍÊÇ¿ÉÒÔÓÃÄÚÈݾÍËõСΪÔÀ´µÄÒ»°ë¡£

3¡¢±ê¼Ç-ÕûÀíËã·¨
¸´ÖÆËã·¨ÔÚ¶ÔÏó´æ»îÂʽϸßʱ¾Í»á½øÐÐÆµ·±µÄ¸´ÖƲÙ×÷£¬Ð§Âʽ«½µµÍ¡£Òò´ËÓÖÓÐÁ˱ê¼Ç-ÕûÀíËã·¨£¬±ê¼Ç¹ý³Ìͬ±ê¼Ç-Çå³ýËã·¨£¬µ«ÊÇÔÚºóÐø²½Öè²»ÊÇÖ±½Ó¶Ô¶ÔÏó½øÐÐÇåÀí£¬¶øÊÇÈÃËùÓдæ»îµÄ¶ÔÏó¶¼ÏòÒ»²àÒÆ¶¯£¬È»ºóÖ±½ÓÇåÀíµô¶Ë±ß½çÒÔÍâµÄÄÚ´æ¡£

4¡¢·Ö´úÊÕ¼¯Ëã·¨
µ±Ç°ÉÌÒµÐéÄâ»úµÄGC¶¼ÊDzÉÓ÷ִúÊÕ¼¯Ëã·¨£¬ÕâÖÖËã·¨²¢Ã»ÓÐʲôеÄ˼Ï룬¶øÊǸù¾Ý¶ÔÏó´æ»îÖÜÆÚµÄ²»Í¬½«¶Ñ·ÖΪ£ºÐÂÉú´úºÍÀÏÄê´ú£¬·½·¨Çø³ÆÎªÓÀ¾Ã´ú£¨ÔÚеİ汾ÖÐÒѾ½«ÓÀ¾Ã´ú·ÏÆú£¬ÒýÈëÁËÔª¿Õ¼äµÄ¸ÅÄÓÀ¾Ã´úʹÓõÄÊÇJVMÄÚ´æ¶øÔª¿Õ¼äÖ±½ÓʹÓÃÎïÀíÄڴ棩¡£
ÕâÑù¾Í¿ÉÒÔ¸ù¾Ý¸÷¸öÄê´úµÄÌØµã²ÉÓò»Í¬µÄÊÕ¼¯Ëã·¨¡£

ÐÂÉú´úÖеĶÔÏó¡°³¯ÉúϦËÀ¡±£¬Ã¿´ÎGCʱ¶¼»áÓдóÁ¿¶ÔÏóËÀÈ¥£¬ÉÙÁ¿´æ»î£¬Ê¹Óø´ÖÆËã·¨¡£ÐÂÉú´úÓÖ·ÖΪEdenÇøºÍSurvivorÇø£¨Survivor
from¡¢Survivor to£©£¬´óС±ÈÀýĬÈÏΪ8:1:1¡£
ÀÏÄê´úÖеĶÔÏóÒòΪ¶ÔÏó´æ»îÂʸߡ¢Ã»ÓжîÍâ¿Õ¼ä½øÐзÖÅäµ£±££¬¾ÍʹÓñê¼Ç-Çå³ý»ò±ê¼Ç-ÕûÀíËã·¨¡£
вúÉúµÄ¶ÔÏóÓÅÏȽøÈ¥EdenÇø£¬µ±EdenÇøÂúÁËÖ®ºóÔÙʹÓÃSurvivor from£¬µ±Survivor
from Ò²ÂúÁËÖ®ºó¾Í½øÐÐMinor GC£¨ÐÂÉú´úGC£©£¬½«EdenºÍSurvivor fromÖдæ»îµÄ¶ÔÏócopy½øÈëSurvivor
to£¬È»ºóÇå¿ÕEdenºÍSurvivor from£¬Õâ¸öʱºòÔÀ´µÄSurvivor from³ÉÁËеÄSurvivor
to£¬ÔÀ´µÄSurvivor to³ÉÁËеÄSurvivor from¡£¸´ÖƵÄʱºò£¬Èç¹ûSurvivor
to ÎÞ·¨ÈÝÄÉÈ«²¿´æ»îµÄ¶ÔÏó£¬Ôò¸ù¾ÝÀÏÄê´úµÄ·ÖÅäµ£±££¨ÀàËÆÓÚÒøÐеĴû¿îµ£±££©½«¶ÔÏócopy½øÈ¥ÀÏÄê´ú£¬Èç¹ûÀÏÄê´úÒ²ÎÞ·¨ÈÝÄÉ£¬Ôò½øÐÐFull
GC£¨ÀÏÄê´úGC£©¡£
´ó¶ÔÏóÖ±½Ó½øÈëÀÏÄê´ú£ºJVMÖÐÓиö²ÎÊýÅäÖÃ-XX:PretenureSizeThreshold£¬Áî´óÓÚÕâ¸öÉèÖÃÖµµÄ¶ÔÏóÖ±½Ó½øÈëÀÏÄê´ú£¬Ä¿µÄÊÇΪÁ˱ÜÃâÔÚEdenºÍSurvivorÇøÖ®¼ä·¢Éú´óÁ¿µÄÄÚ´æ¸´ÖÆ¡£
³¤ÆÚ´æ»îµÄ¶ÔÏó½øÈëÀÏÄê´ú£ºJVM¸øÃ¿¸ö¶ÔÏó¶¨ÒåÒ»¸ö¶ÔÏóÄêÁ伯ÊýÆ÷£¬Èç¹û¶ÔÏóÔÚEden³öÉú²¢¾¹ýµÚÒ»´ÎMinor
GCºóÈÔÈ»´æ»î£¬²¢ÇÒÄܱ»SurvivorÈÝÄÉ£¬½«±»ÒÆÈëSurvivor²¢ÇÒÄêÁäÉ趨Ϊ1¡£Ã»°¾¹ýÒ»´ÎMinor
GC£¬ÄêÁä¾Í¼Ó1£¬µ±ËûµÄÄêÁäµ½Ò»¶¨³Ì¶È£¨Ä¬ÈÏΪ15Ë꣬¿ÉÒÔͨ¹ýXX:MaxTenuringThresholdÀ´É趨£©£¬¾Í»áÒÆÈëÀÏÄê´ú¡£µ«ÊÇJVM²¢²»ÊÇÓÀÔ¶ÒªÇóÄêÁ䱨Ðë´ïµ½×î´óÄêÁä²Å»á½úÉýÀÏÄê´ú£¬Èç¹ûSurvivor
¿Õ¼äÖÐÏàͬÄêÁ䣨ÈçÄêÁäΪx£©ËùÓжÔÏó´óСµÄ×ܺʹóÓÚSurvivorµÄÒ»°ë£¬ÄêÁä´óÓÚµÈÓÚxµÄËùÓжÔÏóÖ±½Ó½øÈëÀÏÄê´ú£¬ÎÞÐèµÈµ½×î´óÄêÁäÒªÇó¡£
ËÄ¡¢À¬»øÊÕ¼¯Æ÷
À¬»øÊÕ¼¯Ëã·¨ÊÇ·½·¨ÂÛ£¬À¬»øÊÕ¼¯Æ÷ÊǾßÌåʵÏÖ¡£JVM¹æ·¶¶ÔÓÚÀ¬»øÊÕ¼¯Æ÷µÄÓ¦¸ÃÈçºÎʵÏÖûÓÐÈκι涨£¬Òò´Ë²»Í¬µÄ³§ÉÌ¡¢²»Í¬°æ±¾µÄÐéÄâ»úËùÌṩµÄÀ¬»øÊÕ¼¯Æ÷²î±ð½Ï´ó£¬ÕâÀïÖ»¿´HotSpotÐéÄâ»ú¡£
JDK7/8ºó£¬HotSpotÐéÄâ»úËùÓÐÊÕ¼¯Æ÷¼°×éºÏ£¨Á¬Ïߣ©ÈçÏ£º

1.SerialÊÕ¼¯Æ÷
SerialÊÕ¼¯Æ÷ÊÇ×î»ù±¾¡¢ÀúÊ·×î¾ÃµÄÊÕ¼¯Æ÷£¬ÔøÊÇÐÂÉú´úÊÖ»úµÄΨһѡÔñ¡£ËûÊǵ¥Ï̵߳ģ¬Ö»»áʹÓÃÒ»¸öCPU»òÒ»ÌõÊÕ¼¯Ïß³ÌÈ¥Íê³ÉÀ¬»øÊÕ¼¯¹¤×÷£¬²¢ÇÒËüÔÚÊÕ¼¯µÄʱºò£¬±ØÐëÔÝÍ£ÆäËûËùÓеŤ×÷Ị̈߳¬Ö±µ½Ëü½áÊø£¬¼´¡°Stop
the World¡±¡£Í£µôËùÓеÄÓû§Ị̈߳¬¶ÔºÜ¶àÓ¦ÓÃÀ´ËµÄÑÒÔ½ÓÊÜ¡£±ÈÈçÄãÔÚ×öÒ»¼þÊÂÇ飬±»±ðÈËÇ¿ÖÆÍ£µô£¬ÄãÐÄÀï±¼ÌÚ¶ø¹ýµÄ¡°ÑòÍÕ¡±»¹ÊýµÄ¹ýÀ´Âð£¿
¾¡¹ÜÈç´Ë£¬ËüÈÔÈ»ÊÇÐéÄâ»úÔËÐÐÔÚclientģʽϵÄĬÈÏÐÂÉú´úÊÕ¼¯Æ÷£º¼òµ¥¶ø¸ßЧ£¨ÓëÆäËûÊÕ¼¯Æ÷µÄµ¥¸öÏß³ÌÏà±È£¬ÒòΪûÓÐÏß³ÌÇл»µÄ¿ªÏúµÈ£©¡£
¹¤×÷ʾÒâͼ£º

2.ParNewÊÕ¼¯Æ÷
ParNewÊÕ¼¯Æ÷ÊÇSerialÊÕ¼¯Æ÷µÄ¶àḬ̈߳汾£¬³ýÁËʹÓÃÁ˶àÏß³ÌÖ®Í⣬ÆäËûµÄÐÐΪ£¨ÊÕ¼¯Ëã·¨¡¢stop
the world¡¢¶ÔÏó·ÖÅ乿Ôò¡¢»ØÊÕ²ßÂԵȣ©Í¬SerialÊÕ¼¯Æ÷Ò»Ñù¡£
ÊÇÐí¶àÔËÐÐÔÚServerģʽϵÄJVMÖÐÊ×Ñ¡µÄÐÂÉú´úÊÕ¼¯Æ÷£¬ÆäÖÐÒ»¸öºÜÖØ»¹ÒªµÄÔÒò¾ÍÊdzýÁËSerialÖ®Í⣬ֻÓÐËûÄܺÍÀÏÄê´úµÄCMSÊÕ¼¯Æ÷ÅäºÏ¹¤×÷¡£
¹¤×÷ʾÒâͼ£º

3.Parallel ScavengeÊÕ¼¯Æ÷
ÐÂÉú´úÊÕ¼¯Æ÷£¬²¢ÐеĶàÏß³ÌÊÕ¼¯Æ÷¡£ËüµÄÄ¿±êÊÇ´ïµ½Ò»¸ö¿É¿ØµÄÍÌÍÂÁ¿£¨¾ÍÊÇCPUÔËÐÐÓû§´úÂëµÄʱ¼äÓëCPU×ÜÏûºÄʱ¼äµÄ±ÈÖµ£¬¼´
ÍÌÍÂÁ¿=ÐÐÓû§´úÂëµÄʱ¼ä/[ÐÐÓû§´úÂëµÄʱ¼ä+À¬»øÊÕ¼¯Ê±¼ä]£©£¬ÕâÑù¿ÉÒÔ¸ßЧÂʵÄÀûÓÃCPUʱ¼ä£¬¾¡¿ìÍê³É³ÌÐòµÄÔËËãÈÎÎñ£¬ÊʺÏÔÚºǫ́ÔËËã¶ø²»ÐèҪ̫¶à½»»¥µÄÈÎÎñ¡£
4.Serial OldÊÕ¼¯Æ÷
Serial ÊÕ¼¯Æ÷µÄÀÏÄê´ú°æ±¾£¬µ¥Ị̈߳¬¡°±ê¼ÇÕûÀí¡±Ëã·¨£¬Ö÷ÒªÊǸøClientģʽϵÄÐéÄâ»úʹÓá£
ÁíÍ⻹¿ÉÒÔÔÚServerģʽÏ£º
JDK 1.5֮ǰµÄ°æ±¾ÖÐÓêParallel Scavenge ÊÕ¼¯Æ÷´îÅäʹÓÃ
¿ÉÒÔ×÷ΪCMSµÄºó±³·½°¸£¬ÔÚCMS·¢ÉúConcurrent Mode FailureÊÇʹÓÃ
¹¤×÷ʾÒâͼ£º

5.Parallel OldÊÕ¼¯Æ÷
Parallel ScavengeµÄÀÏÄê´ú°æ±¾£¬¶àỊ̈߳¬¡°±ê¼ÇÕûÀí¡±Ëã·¨£¬JDK 1.6²Å³öÏÖ¡£ÔÚ´Ë֮ǰParallel
ScavengeÖ»ÄÜͬSerial Old´îÅäʹÓã¬ÓÉÓÚSerial OldµÄÐÔÄܽϲÖÂParallel
ScavengeµÄÓÅÊÆ·¢»Ó²»³öÀ´£¬ÞÏÁ˸öÞÎ~~
Parallel OldÊÕ¼¯Æ÷µÄ³öÏÖ£¬Ê¹¡°ÍÌÍÂÁ¿ÓÅÏÈ¡±ÊÕ¼¯Æ÷ÖÕÓÚÓÐÁËÃû¸±ÆäʵµÄ×éºÏ¡£ÔÚÍÌÍÂÁ¿ºÍCPUÃô¸ÐµÄ³¡ºÏ£¬¶¼¿ÉÒÔʹÓÃParallel
Scavenge/Parallel Old×éºÏ¡£×éºÏµÄ¹¤×÷ʾÒâͼÈçÏ£º

6.CMSÊÕ¼¯Æ÷
CMS(Concurrent Mark Sweep)ÊÕ¼¯Æ÷ÊÇÒ»ÖÖÒÔ»ñÈ¡×î¶Ì»ØÊÕÍ£¶Ùʱ¼äΪĿ±êµÄÊÕ¼¯Æ÷£¬Í£¶Ùʱ¼ä¶Ì£¬Óû§ÌåÑé¾ÍºÃ¡£
»ùÓÚ¡°±ê¼ÇÇå³ý¡±Ëã·¨£¬²¢·¢ÊÕ¼¯¡¢µÍÍ£¶Ù£¬ÔË×÷¹ý³Ì¸´ÔÓ£¬·Ö4²½£º
1)³õʼ±ê¼Ç£º½ö½ö±ê¼ÇGC RootsÄÜÖ±½Ó¹ØÁªµ½µÄ¶ÔÏó£¬Ëٶȿ죬µ«ÊÇÐèÒª¡°Stop
The World¡±
2)²¢·¢±ê¼Ç£º¾ÍÊǽøÐÐ×·×ÙÒýÓÃÁ´µÄ¹ý³Ì£¬¿ÉÒÔºÍÓû§Ï̲߳¢·¢Ö´ÐС£
3)ÖØÐ±ê¼Ç£ºÐÞÕý²¢·¢±ê¼Ç½×¶ÎÒòÓû§Ï̼߳ÌÐøÔËÐжøµ¼Ö±ê¼Ç·¢Éú±ä»¯µÄÄDz¿·Ö¶ÔÏóµÄ±ê¼Ç¼Ç¼£¬±È³õʼ±ê¼Çʱ¼ä³¤µ«Ô¶±È²¢·¢±ê¼Çʱ¼ä¶Ì£¬ÐèÒª¡°Stop
The World¡±
4)²¢·¢Çå³ý£ºÇå³ý±ê¼ÇΪ¿ÉÒÔ»ØÊÕ¶ÔÏ󣬿ÉÒÔºÍÓû§Ï̲߳¢·¢Ö´ÐÐ
ÓÉÓÚÕû¸ö¹ý³ÌºÄʱ×µÄ²¢·¢±ê¼ÇºÍ²¢·¢Çå³ý¶¼¿ÉÒÔºÍÓû§Ïß³ÌÒ»Æð¹¤×÷£¬ËùÒÔ×ÜÌåÉÏÀ´¿´£¬CMSÊÕ¼¯Æ÷µÄÄÚ´æ»ØÊÕ¹ý³ÌºÍÓû§Ïß³ÌÊDz¢·¢Ö´Ðеġ£
¹¤×÷ʾÒâͼ£º

CSMÊÕ¼¯Æ÷ÓÐ3¸öȱµã£º
1)¶ÔCPU×ÊÔ´·Ç³£Ãô¸Ð
²¢·¢ÊÕ¼¯ËäÈ»²»»áÔÝÍ£Óû§Ị̈߳¬µ«ÒòΪռÓÃÒ»²¿·ÖCPU×ÊÔ´£¬»¹ÊǻᵼÖÂÓ¦ÓóÌÐò±äÂý£¬×ÜÍÌÍÂÁ¿½µµÍ¡£
CMSµÄĬÈÏÊÕ¼¯Ïß³ÌÊýÁ¿ÊÇ=(CPUÊýÁ¿+3)/4£»µ±CPUÊýÁ¿¶àÓÚ4¸ö£¬ÊÕ¼¯Ïß³ÌÕ¼ÓõÄCPU×ÊÔ´¶àÓÚ25%£¬¶ÔÓû§³ÌÐòÓ°Ïì¿ÉÄܽϴ󣻲»×ã4¸öʱ£¬Ó°Ïì¸ü´ó£¬¿ÉÄÜÎÞ·¨½ÓÊÜ¡£
2)ÎÞ·¨´¦Àí¸¡¶¯À¬»ø£¨ÔÚ²¢·¢Çå³ýʱ£¬Óû§Ïß³ÌвúÉúµÄÀ¬»ø½Ð¸¡¶¯À¬»ø£©,¿ÉÄܳöÏÖ"Concurrent
Mode Failure"ʧ°Ü¡£
²¢·¢Çå³ýʱÐèÒªÔ¤ÁôÒ»¶¨µÄÄÚ´æ¿Õ¼ä£¬²»ÄÜÏñÆäËûÊÕ¼¯Æ÷ÔÚÀÏÄê´ú¼¸ºõÌîÂúÔÙ½øÐÐÊÕ¼¯£»Èç¹ûCMSÔ¤ÁôÄÚ´æ¿Õ¼äÎÞ·¨Âú×ã³ÌÐòÐèÒª£¬¾Í»á³öÏÖÒ»´Î"Concurrent
Mode Failure"ʧ°Ü£»ÕâʱJVMÆôÓúó±¸Ô¤°¸£ºÁÙʱÆôÓÃSerail OldÊÕ¼¯Æ÷£¬¶øµ¼ÖÂÁíÒ»´ÎFull
GCµÄ²úÉú£»
3)²úÉú´óÁ¿ÄÚ´æË鯬£ºCMS»ùÓÚ"±ê¼Ç-Çå³ý"Ëã·¨£¬Çå³ýºó²»½øÐÐѹËõ²Ù×÷²úÉú´óÁ¿²»Á¬ÐøµÄÄÚ´æË鯬£¬ÕâÑù»áµ¼Ö·ÖÅä´óÄÚ´æ¶ÔÏóʱ£¬ÎÞ·¨ÕÒµ½×ã¹»µÄÁ¬ÐøÄڴ棬´Ó¶øÐèÒªÌáǰ´¥·¢ÁíÒ»´ÎFull
GC¶¯×÷¡£
7.G1ÊÕ¼¯Æ÷
G1£¨Garbage-First£©ÊÇJDK7-u4²ÅÕýÊ½ÍÆ³öÉÌÓõÄÊÕ¼¯Æ÷¡£G1ÊÇÃæÏò·þÎñ¶ËÓ¦ÓõÄÀ¬»øÊÕ¼¯Æ÷¡£ËüµÄʹÃüÊÇδÀ´¿ÉÒÔÌæ»»µôCMSÊÕ¼¯Æ÷¡£
G1ÊÕ¼¯Æ÷ÌØÐÔ£º
²¢ÐÐÓë²¢·¢£ºÄܳä·ÖÀûÓöàCPU¡¢¶àºË»·¾³µÄÓ²¼þÓÅÊÆ£¬Ëõ¶ÌÍ£¶Ùʱ¼ä£»ÄܺÍÓû§Ï̲߳¢·¢Ö´ÐС£
·Ö´úÊÕ¼¯£ºG1¿ÉÒÔ²»ÐèÒªÆäËûGCÊÕ¼¯Æ÷µÄÅäºÏ¾ÍÄܶÀÁ¢¹ÜÀíÕû¸ö¶Ñ£¬²ÉÓò»Í¬µÄ·½Ê½´¦ÀíÐÂÉú¶ÔÏóºÍÒѾ´æ»îÒ»¶Îʱ¼äµÄ¶ÔÏó¡£
¿Õ¼äÕûºÏ£ºÕûÌåÉÏ¿´²ÉÓñê¼ÇÕûÀíËã·¨£¬¾Ö²¿¿´²ÉÓø´ÖÆËã·¨£¨Á½¸öRegionÖ®¼ä£©£¬²»»áÓÐÄÚ´æË鯬£¬²»»áÒòΪ´ó¶ÔÏóÕÒ²»µ½×ã¹»µÄÁ¬Ðø¿Õ¼ä¶øÌáǰ´¥·¢GC£¬ÕâµãÓÅÓÚCMSÊÕ¼¯Æ÷¡£
¿ÉÔ¤²âµÄÍ£¶Ù£º³ýÁË×·ÇóµÍÍ£¶Ù»¹Äܽ¨Á¢¿ÉÒÔÔ¤²âµÄÍ£¶Ùʱ¼äÄ£ÐÍ£¬ÄÜÈÃʹÓÃÕßÃ÷È·Ö¸¶¨ÔÚÒ»¸ö³¤¶ÈΪMºÁÃëµÄʱ¼äƬ¶ÎÄÚ£¬ÏûºÄÔÚÀ¬»øÊÕ¼¯ÉϵÄʱ¼ä²»³¬NºÁÃ룬ÕâµãÓÅÓÚCMSÊÕ¼¯Æ÷¡£
ΪʲôÄÜ×öµ½¿ÉÔ¤²âµÄÍ£¶Ù£¿
ÊÇÒòΪ¿ÉÒÔÓмƻ®µÄ±ÜÃâÔÚÕû¸öJava¶ÑÖнøÐÐÈ«ÇøÓòµÄÀ¬»øÊÕ¼¯¡£
G1ÊÕ¼¯Æ÷½«ÄÚ´æ·Ö´óСÏàµÈµÄ¶ÀÁ¢ÇøÓò£¨Region£©£¬ÐÂÉú´úºÍÀÏÄê´ú¸ÅÄî±£Áô£¬µ«ÊÇÒѾ²»ÔÙÎïÀí¸ôÀë¡£
G1¸ú×Ù¸÷¸öRegion»ñµÃÆäÊÕ¼¯¼ÛÖµ´óС£¬ÔÚºǫ́ά»¤Ò»¸öÓÅÏÈÁÐ±í£»
ÿ´Î¸ù¾ÝÔÊÐíµÄÊÕ¼¯Ê±¼ä£¬ÓÅÏÈ»ØÊÕ¼ÛÖµ×î´óµÄRegion£¨Ãû³ÆGarbage-FirstµÄÓÉÀ´£©£»
Õâ¾Í±£Ö¤ÁËÔÚÓÐÏÞµÄʱ¼äÄÚ¿ÉÒÔ»ñÈ¡¾¡¿ÉÄܸߵÄÊÕ¼¯Ð§ÂÊ¡£
¶ÔÏ󱻯äËûRegionµÄ¶ÔÏóÒýÓÃÁËÔõô°ì£¿
Åж϶ÔÏó´æ»îʱ£¬ÊÇ·ñÐèҪɨÃèÕû¸öJava¶Ñ²ÅÄܱ£Ö¤×¼È·£¿ÔÚÆäËûµÄ·Ö´úÊÕ¼¯Æ÷£¬Ò²´æÔÚÕâÑùµÄÎÊÌ⣨¶øG1¸üÍ»³ö£©£ºÐÂÉú´ú»ØÊÕµÄʱºò²»µÃ²»É¨ÃèÀÏÄê´ú£¿
ÎÞÂÛG1»¹ÊÇÆäËû·Ö´úÊÕ¼¯Æ÷£¬JVM¶¼ÊÇʹÓÃRemembered SetÀ´±ÜÃâÈ«¾ÖɨÃ裺
ÿ¸öRegion¶¼ÓÐÒ»¸ö¶ÔÓ¦µÄRemembered Set£»
ÿ´ÎReferenceÀàÐÍÊý¾Ýд²Ù×÷ʱ£¬¶¼»á²úÉúÒ»¸öWrite Barrier ÔÝʱÖжϲÙ×÷£»
È»ºó¼ì²é½«ÒªÐ´ÈëµÄÒýÓÃÖ¸ÏòµÄ¶ÔÏóÊÇ·ñºÍ¸ÃReferenceÀàÐÍÊý¾ÝÔÚ²»Í¬µÄ Region£¨ÆäËûÊÕ¼¯Æ÷£º¼ì²éÀÏÄê´ú¶ÔÏóÊÇ·ñÒýÓÃÁËÐÂÉú´ú¶ÔÏ󣩣»
Èç¹û²»Í¬£¬Í¨¹ýCardTable°ÑÏà¹ØÒýÓÃÐÅÏ¢¼Ç¼µ½ÒýÓÃÖ¸Ïò¶ÔÏóµÄËùÔÚRegion¶ÔÓ¦µÄRemembered
SetÖУ»
½øÐÐÀ¬»øÊÕ¼¯Ê±£¬ÔÚGC¸ù½ÚµãµÄö¾Ù·¶Î§¼ÓÈë Remembered Set £¬¾Í¿ÉÒÔ±£Ö¤²»½øÐÐÈ«¾ÖɨÃ裬Ҳ²»»áÓÐÒÅ©¡£ |
²»¼ÆËãά»¤Remembered SetµÄ²Ù×÷£¬»ØÊÕ¹ý³Ì¿ÉÒÔ·ÖΪ4¸ö²½Ö裨ÓëCMS½ÏΪÏàËÆ£©£º
1)³õʼ±ê¼Ç£º½ö½ö±ê¼ÇGC RootsÄÜÖ±½Ó¹ØÁªµ½µÄ¶ÔÏ󣬲¢ÐÞ¸ÄTAMS(Next
Top at Mark Start)µÄÖµ£¬ÈÃÏÂÒ»½×¶ÎÓû§³ÌÐò²¢·¢ÔËÐÐʱÄÜÔÚÕýÈ·¿ÉÓõÄRegionÖд´½¨Ð¶ÔÏó£¬ÐèÒª¡°Stop
The World¡±
2)²¢·¢±ê¼Ç£º´ÓGC Roots¿ªÊ¼½øÐпɴïÐÔ·ÖÎö£¬ÕÒ³ö´æ»î¶ÔÏ󣬺Äʱ³¤£¬¿ÉÓëÓû§Ï̲߳¢·¢Ö´ÐÐ
3)×îÖÕ±ê¼Ç£ºÐÞÕý²¢·¢±ê¼Ç½×¶ÎÒòÓû§Ï̼߳ÌÐøÔËÐжøµ¼Ö±ê¼Ç·¢Éú±ä»¯µÄÄDz¿·Ö¶ÔÏóµÄ±ê¼Ç¼Ç¼¡£²¢·¢±ê¼ÇʱÐéÄâ»ú½«¶ÔÏó±ä»¯¼Ç¼ÔÚÏß³ÌRemember
Set LogsÀïÃæ£¬×îÖÕ±ê¼Ç½×¶Î½«Remember Set LogsÕûºÏµ½Remember SetÖУ¬±È³õʼ±ê¼Çʱ¼ä³¤µ«Ô¶±È²¢·¢±ê¼Çʱ¼ä¶Ì£¬ÐèÒª¡°Stop
The World¡±
4)ɸѡ»ØÊÕ£ºÊ×ÏȶԸ÷¸öRegionµÄ»ØÊÕ¼ÛÖµºÍ³É±¾½øÐÐÅÅÐò£¬È»ºó¸ù¾ÝÓû§ÆÚÍûµÄGCÍ£¶Ùʱ¼äÀ´¶¨ÖÆ»ØÊռƻ®£¬×îºó°´¼Æ»®»ØÊÕһЩ¼ÛÖµ¸ßµÄRegionÖÐÀ¬»ø¶ÔÏó¡£»ØÊÕʱ²ÉÓø´ÖÆËã·¨£¬´ÓÒ»¸ö»ò¶à¸öRegion¸´ÖÆ´æ»î¶ÔÏóµ½¶ÑÉϵÄÁíÒ»¸ö¿ÕµÄRegion£¬²¢ÇÒÔڴ˹ý³ÌÖÐѹËõºÍÊÍ·ÅÄڴ棻¿ÉÒÔ²¢·¢½øÐУ¬½µµÍÍ£¶Ùʱ¼ä£¬²¢Ôö¼ÓÍÌÍÂÁ¿¡£
¹¤×÷ʾÒâͼ£º

Îå¡¢½áÊøÓï
µ½´Ë£¬±¾ÆªËæ±ÊÖÕÓÚдÍêÁË¡£ |