±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ
ZIWENXIE£¬±¾ÎÄÖ÷Òª½²ÊöJVMÖм¸ÖÖ³£¼ûµÄÀ¬»ø»ØÊÕËã·¨ºÍÏà¹ØµÄÀ¬»ø»ØÊÕÆ÷£¬ÒÔ¼°³£¼ûµÄºÍGCÏà¹ØµÄÐÔÄܵ÷ÓŲÎÊý¡£ |
|
GC Roots
ÎÒÃÇÏÈÀ´Á˽âÒ»ÏÂÔÚJavaÖÐÊÇÈçºÎÅжÏÒ»¸ö¶ÔÏóµÄÉúËÀµÄ£¬ÓÐЩÓïÑÔ±ÈÈçPythonÊDzÉÓÃÒýÓüÆÊýÀ´Í³¼ÆµÄ£¬µ«ÊÇÕâÖÖ×ö·¨¿ÉÄÜ»áÓö¼ûÑ»·ÒýÓõÄÎÊÌ⣬ÔÚJavaÒÔ¼°C#µÈÓïÑÔÖÐÊDzÉÓÃGC
RootsÀ´½â¾öÕâ¸öÎÊÌâ¡£Èç¹ûÒ»¸ö¶ÔÏóºÍGC RootsÖ®¼äûÓÐÁ´½Ó£¬ÄÇôÕâ¸ö¶ÔÏóÒ²¿ÉÒÔ±»ÊÓ×÷ÊÇÒ»¸ö¿É»ØÊյĶÔÏó¡£
JavaÖпÉÒÔ±»×÷ΪGC RootsÖеĶÔÏóÓУº
ÐéÄâ»úÕ»ÖеÄÒýÓõĶÔÏó¡£
·½·¨ÇøÖеÄÀྲ̬ÊôÐÔÒýÓõĶÔÏó¡£
·½·¨ÇøÖеij£Á¿ÒýÓõĶÔÏó¡£
±¾µØ·½·¨Õ»£¨jni£©¼´Ò»°ã˵µÄNativeµÄÒýÓöÔÏó¡£
À¬»ø»ØÊÕËã·¨
±ê¼ÇÇå³ý
±ê¼Ç-Çå³ýËã·¨½«À¬»ø»ØÊÕ·ÖΪÁ½¸ö½×¶Î£º±ê¼Ç½×¶ÎºÍÇå³ý½×¶Î¡£ÔÚ±ê¼Ç½×¶ÎÊ×ÏÈͨ¹ý¸ù½Úµã£¬±ê¼ÇËùÓдӸù½Úµã¿ªÊ¼µÄ¶ÔÏó£¬Î´±»±ê¼ÇµÄ¶ÔÏó¾ÍÊÇδ±»ÒýÓõÄÀ¬»ø¶ÔÏó¡£È»ºó£¬ÔÚÇå³ý½×¶Î£¬Çå³ýËùÓÐδ±»±ê¼ÇµÄ¶ÔÏó¡£±ê¼ÇÇå³ýËã·¨´øÀ´µÄÒ»¸öÎÊÌâÊÇ»á´æÔÚ´óÁ¿µÄ¿Õ¼äË鯬£¬ÒòΪ»ØÊÕºóµÄ¿Õ¼äÊDz»Á¬ÐøµÄ£¬ÕâÑù¸ø´ó¶ÔÏó·ÖÅäÄÚ´æµÄʱºò¿ÉÄÜ»áÌáǰ´¥·¢full
gc¡£
¸´ÖÆËã·¨
½«ÏÖÓеÄÄÚ´æ¿Õ¼ä·ÖΪÁ½¿ì£¬Ã¿´ÎֻʹÓÃÆäÖÐÒ»¿é£¬ÔÚÀ¬»ø»ØÊÕʱ½«ÕýÔÚʹÓõÄÄÚ´æÖеĴæ»î¶ÔÏó¸´ÖƵ½Î´±»Ê¹ÓõÄÄÚ´æ¿éÖУ¬Ö®ºó£¬Çå³ýÕýÔÚʹÓõÄÄÚ´æ¿éÖеÄËùÓжÔÏ󣬽»»»Á½¸öÄÚ´æµÄ½ÇÉ«£¬Íê³ÉÀ¬»ø»ØÊÕ¡£
ÏÖÔÚµÄÉÌÒµÐéÄâ»ú¶¼²ÉÓÃÕâÖÖÊÕ¼¯Ëã·¨À´»ØÊÕÐÂÉú´ú£¬IBMÑо¿±íÃ÷ÐÂÉú´úÖеĶÔÏó98%Êdz¯Ï¦ÉúËÀµÄ£¬ËùÒÔ²¢²»ÐèÒª°´ÕÕ1:1µÄ±ÈÀý»®·ÖÄÚ´æ¿Õ¼ä£¬¶øÊǽ«ÄÚ´æ·ÖΪһ¿é½Ï´óµÄEden¿Õ¼äºÍÁ½¿é½ÏСµÄSurvivor¿Õ¼ä£¬Ã¿´ÎʹÓÃEdenºÍÆäÖеÄÒ»¿éSurvivor¡£µ±»ØÊÕʱ£¬½«EdenºÍSurvivorÖл¹´æ»î×ŵĶÔÏóÒ»´ÎÐԵؿ½±´µ½ÁíÍâÒ»¸öSurvivor¿Õ¼äÉÏ£¬×îºóÇåÀíµôEdenºÍ¸Õ²ÅÓùýµÄSurvivorµÄ¿Õ¼ä¡£HotSpotÐéÄâ»úĬÈÏEdenºÍSurvivorµÄ´óС±ÈÀýÊÇ8:1(¿ÉÒÔͨ¹ý-SurvivorRattioÀ´ÅäÖÃ)£¬Ò²¾ÍÊÇÿ´ÎÐÂÉú´úÖпÉÓÃÄÚ´æ¿Õ¼äΪÕû¸öÐÂÉú´úÈÝÁ¿µÄ90%£¬Ö»ÓÐ10%µÄÄÚ´æ»á±»¡°ÀË·Ñ¡±¡£µ±È»£¬98%µÄ¶ÔÏó¿É»ØÊÕÖ»ÊÇÒ»°ã³¡¾°ÏµÄÊý¾Ý£¬ÎÒÃÇûÓа취±£Ö¤»ØÊÕ¶¼Ö»Óв»¶àÓÚ10%µÄ¶ÔÏó´æ»î£¬µ±Survivor¿Õ¼ä²»¹»ÓÃʱ£¬ÐèÒªÒÀÀµÆäËûÄڴ棨ÕâÀïÖ¸ÀÏÄê´ú£©½øÐзÖÅäµ£±£¡£
±ê¼ÇÕûÀí
¸´ÖÆËã·¨µÄ¸ßЧÐÔÊǽ¨Á¢ÔÚ´æ»î¶ÔÏóÉÙ¡¢À¬»ø¶ÔÏó¶àµÄǰÌáϵġ£ÕâÖÖÇé¿öÔÚÐÂÉú´ú¾³£·¢Éú£¬µ«ÊÇÔÚÀÏÄê´ú¸ü³£¼ûµÄÇé¿öÊǴ󲿷ֶÔÏó¶¼ÊÇ´æ»î¶ÔÏó¡£Èç¹ûÒÀȻʹÓø´ÖÆËã·¨£¬ÓÉÓÚ´æ»îµÄ¶ÔÏó½Ï¶à£¬¸´ÖƵijɱ¾Ò²½«ºÜ¸ß¡£
±ê¼Ç-ѹËõËã·¨ÊÇÒ»ÖÖÀÏÄê´úµÄ»ØÊÕËã·¨£¬ËüÔÚ±ê¼Ç-Çå³ýËã·¨µÄ»ù´¡ÉÏ×öÁËһЩÓÅ»¯¡£Ê×ÏÈÒ²ÐèÒª´Ó¸ù½Úµã¿ªÊ¼¶ÔËùÓпɴï¶ÔÏó×öÒ»´Î±ê¼Ç£¬µ«Ö®ºó£¬Ëü²¢²»¼òµ¥µØÇåÀíδ±ê¼ÇµÄ¶ÔÏ󣬶øÊǽ«ËùÓеĴæ»î¶ÔÏóѹËõµ½ÄÚ´æµÄÒ»¶Ë¡£Ö®ºó£¬ÇåÀí±ß½çÍâËùÓеĿռ䡣ÕâÖÖ·½·¨¼È±ÜÃâÁËË鯬µÄ²úÉú£¬ÓÖ²»ÐèÒªÁ½¿éÏàͬµÄÄÚ´æ¿Õ¼ä£¬Òò´Ë£¬ÆäÐԼ۱ȱȽϸߡ£
ÔöÁ¿Ëã·¨
ÔöÁ¿Ëã·¨µÄ»ù±¾Ë¼ÏëÊÇ£¬Èç¹ûÒ»´ÎÐÔ½«ËùÓеÄÀ¬»ø½øÐд¦Àí£¬ÐèÒªÔì³Éϵͳ³¤Ê±¼äµÄÍ£¶Ù£¬ÄÇô¾Í¿ÉÒÔÈÃÀ¬»øÊÕ¼¯Ï̺߳ÍÓ¦ÓóÌÐòÏ߳̽»ÌæÖ´ÐС£Ã¿´Î£¬À¬»øÊÕ¼¯Ïß³ÌÖ»ÊÕ¼¯Ò»Ð¡Æ¬ÇøÓòµÄÄÚ´æ¿Õ¼ä£¬½Ó×ÅÇл»µ½Ó¦ÓóÌÐòÏ̡߳£ÒÀ´Î·´¸´£¬Ö±µ½À¬»øÊÕ¼¯Íê³É¡£Ê¹ÓÃÕâÖÖ·½Ê½£¬ÓÉÓÚÔÚÀ¬»ø»ØÊÕ¹ý³ÌÖУ¬¼ä¶ÏÐԵػ¹Ö´ÐÐÁËÓ¦ÓóÌÐò´úÂ룬ËùÒÔÄܼõÉÙϵͳµÄÍ£¶Ùʱ¼ä¡£µ«ÊÇ£¬ÒòΪÏß³ÌÇл»ºÍÉÏÏÂÎÄת»»µÄÏûºÄ£¬»áʹµÃÀ¬»ø»ØÊÕµÄ×ÜÌå³É±¾ÉÏÉý£¬Ôì³ÉϵͳÍÌÍÂÁ¿µÄϽµ¡£
À¬»ø»ØÊÕÆ÷
SerialÊÕ¼¯Æ÷
SerialÊÕ¼¯Æ÷ÊÇ×î¹ÅÀϵÄÊÕ¼¯Æ÷£¬ËüµÄȱµãÊǵ±SerialÊÕ¼¯Æ÷Ïë½øÐÐÀ¬»ø»ØÊÕµÄʱºò£¬±ØÐëÔÝÍ£Óû§µÄËùÓнø³Ì£¬¼´stop
the world¡£µ½ÏÖÔÚΪֹ£¬ËüÒÀÈ»ÊÇÐéÄâ»úÔËÐÐÔÚclientģʽϵÄĬÈÏÐÂÉú´úÊÕ¼¯Æ÷£¬ÓëÆäËûÊÕ¼¯Æ÷Ïà±È£¬¶ÔÓÚÏÞ¶¨ÔÚµ¥¸öCPUµÄÔËÐл·¾³À´Ëµ£¬SerialÊÕ¼¯Æ÷ÓÉÓÚûÓÐÏ߳̽»»¥µÄ¿ªÏú£¬×¨ÐÄ×öÀ¬»ø»ØÊÕ×ÔÈ»¿ÉÒÔ»ñµÃ×î¸ßµÄµ¥Ïß³ÌÊÕ¼¯Ð§ÂÊ¡£
Serial OldÊÇSerialÊÕ¼¯Æ÷µÄÀÏÄê´ú°æ±¾£¬ËüͬÑùÊÇÒ»¸öµ¥Ïß³ÌÊÕ¼¯Æ÷£¬Ê¹Óá±±ê¼Ç£ÕûÀí¡°Ëã·¨¡£Õâ¸öÊÕ¼¯Æ÷µÄÖ÷ÒªÒâÒåÒ²ÊDZ»ClientģʽϵÄÐéÄâ»úʹÓá£ÔÚServerģʽÏ£¬ËüÖ÷Òª»¹ÓÐÁ½´óÓÃ;£ºÒ»¸öÊÇÔÚJDK1.5¼°ÒÔǰµÄ°æ±¾ÖÐÓëParallel
ScanvengeÊÕ¼¯Æ÷´îÅäʹÓã¬ÁíÍâÒ»¸ö¾ÍÊÇ×÷ΪCMSÊÕ¼¯Æ÷µÄºó±¸Ô¤°¸£¬ÔÚ²¢·¢ÊÕ¼¯·¢ÉúConcurrent
Mode FailureµÄʱºòʹÓá£
ͨ¹ýÖ¸¶¨-UseSerialGC²ÎÊý£¬Ê¹ÓÃSerial + Serial OldµÄ´®ÐÐÊÕ¼¯Æ÷×éºÏ½øÐÐÄÚ´æ»ØÊÕ¡£
ParNewÊÕ¼¯Æ÷
ParNewÊÕ¼¯Æ÷ÊÇSerialÊÕ¼¯Æ÷ÐÂÉú´úµÄ¶àÏß³ÌʵÏÖ£¬×¢ÒâÔÚ½øÐÐÀ¬»ø»ØÊÕµÄʱºòÒÀÈ»»ástop
the world£¬Ö»ÊÇÏà±È½ÏSerialÊÕ¼¯Æ÷¶øÑÔËü»áÔËÐжàÌõ½ø³Ì½øÐÐÀ¬»ø»ØÊÕ¡£
ParNewÊÕ¼¯Æ÷ÔÚµ¥CPUµÄ»·¾³Öоø¶Ô²»»áÓбÈSerialÊÕ¼¯Æ÷¸üºÃµÄЧ¹û£¬ÉõÖÁÓÉÓÚ´æÔÚÏ߳̽»»¥µÄ¿ªÏú£¬¸ÃÊÕ¼¯Æ÷ÔÚͨ¹ý³¬Ï̼߳¼ÊõʵÏÖµÄÁ½¸öCPUµÄ»·¾³Öж¼²»ÄܰٷÖÖ®°ÙµÄ±£Ö¤Äܳ¬Ô½SerialÊÕ¼¯Æ÷¡£µ±È»£¬Ëæ×Å¿ÉÒÔʹÓõÄCPUµÄÊýÁ¿Ôö¼Ó£¬Ëü¶ÔÓÚGCʱϵͳ×ÊÔ´µÄÀûÓû¹ÊǺÜÓкô¦µÄ¡£ËüĬÈÏ¿ªÆôµÄÊÕ¼¯Ïß³ÌÊýÓëCPUµÄÊýÁ¿Ïàͬ£¬ÔÚCPU·Ç³£¶à£¨Æ©Èç32¸ö£¬ÏÖÔÚCPU¶¯éü4ºË¼Ó³¬Ị̈߳¬·þÎñÆ÷³¬¹ý32¸öÂß¼CPUµÄÇé¿öÔ½À´Ô½¶àÁË£©µÄ»·¾³Ï£¬¿ÉÒÔʹÓÃ-XX:ParallelGCThreads²ÎÊýÀ´ÏÞÖÆÀ¬»øÊÕ¼¯µÄÏß³ÌÊý¡£
-UseParNewGC: ´ò¿ª´Ë¿ª¹Øºó£¬Ê¹ÓÃParNew + Serial OldµÄÊÕ¼¯Æ÷×éºÏ½øÐÐÄÚ´æ»ØÊÕ£¬ÕâÑùÐÂÉú´úʹÓò¢ÐÐÊÕ¼¯Æ÷£¬ÀÏÄê´úʹÓô®ÐÐÊÕ¼¯Æ÷¡£
Parallel ScavengeÊÕ¼¯Æ÷
ParallelÊDzÉÓø´ÖÆËã·¨µÄ¶àÏß³ÌÐÂÉú´úÀ¬»ø»ØÊÕÆ÷£¬ËƺõºÍParNewÊÕ¼¯Æ÷ÓкܶàµÄÏàËÆµÄµØ·½¡£µ«ÊÇParallel
ScanvengeÊÕ¼¯Æ÷µÄÒ»¸öÌØµãÊÇËüËù¹Ø×¢µÄÄ¿±êÊÇÍÌÍÂÁ¿(Throughput)¡£ËùνÍÌÍÂÁ¿¾ÍÊÇCPUÓÃÓÚÔËÐÐÓû§´úÂëµÄʱ¼äÓëCPU×ÜÏûºÄʱ¼äµÄ±ÈÖµ£¬¼´ÍÌÍÂÁ¿=ÔËÐÐÓû§´úÂëʱ¼ä
/ (ÔËÐÐÓû§´úÂëʱ¼ä + À¬»øÊÕ¼¯Ê±¼ä)¡£Í£¶Ùʱ¼äÔ½¶Ì¾ÍÔ½ÊʺÏÐèÒªÓëÓû§½»»¥µÄ³ÌÐò£¬Á¼ºÃµÄÏìÓ¦ËÙ¶ÈÄܹ»ÌáÉýÓû§µÄÌåÑ飻¶ø¸ßÍÌÍÂÁ¿Ôò¿ÉÒÔ×î¸ßЧÂʵØÀûÓÃCPUʱ¼ä£¬¾¡¿ìµØÍê³É³ÌÐòµÄÔËËãÈÎÎñ£¬Ö÷ÒªÊʺÏÔÚºǫ́ÔËËã¶ø²»ÐèҪ̫¶à½»»¥µÄÈÎÎñ¡£
Parallel OldÊÕ¼¯Æ÷ÊÇParallel ScavengeÊÕ¼¯Æ÷µÄÀÏÄê´ú°æ±¾£¬²ÉÓöàÏ̺߳͡±±ê¼Ç£ÕûÀí¡±Ëã·¨¡£Õâ¸öÊÕ¼¯Æ÷ÊÇÔÚjdk1.6ÖвſªÊ¼ÌṩµÄ£¬ÔÚ´Ë֮ǰ£¬ÐÂÉú´úµÄParallel
ScavengeÊÕ¼¯Æ÷Ò»Ö±´¦ÓڱȽÏÞÏÞεÄ״̬¡£ÔÒòÊÇÈç¹ûÐÂÉú´úParallel ScavengeÊÕ¼¯Æ÷£¬ÄÇôÀÏÄê´ú³ýÁËSerial
Old(PS MarkSweep)ÊÕ¼¯Æ÷Íâ±ðÎÞÑ¡Ôñ¡£ÓÉÓÚµ¥Ï̵߳ÄÀÏÄê´úSerial OldÊÕ¼¯Æ÷ÔÚ·þÎñ¶ËÓ¦ÓÃÐÔÄÜÉϵġ±ÍÏÀÛ¡°£¬¼´Ê¹Ê¹ÓÃÁËParallel
ScavengeÊÕ¼¯Æ÷Ҳδ±ØÄÜÔÚÕûÌåÓ¦ÓÃÉÏ»ñµÃÍÌÍÂÁ¿×î´ó»¯µÄЧ¹û£¬ÓÖÒòΪÀÏÄê´úÊÕ¼¯ÖÐÎÞ·¨³ä·ÖÀûÓ÷þÎñÆ÷¶àCPUµÄ´¦ÀíÄÜÁ¦£¬ÔÚÀÏÄê´úºÜ´ó¶øÇÒÓ²¼þ±È½Ï¸ß¼¶µÄ»·¾³ÖУ¬ÕâÖÖ×éºÏµÄÍÌÍÂÁ¿ÉõÖÁ»¹²»Ò»¶¨ÓÐParNew¼ÓCMSµÄ×éºÏ¡±¸øÁ¦¡°¡£Ö±µ½Parallel
OldÊÕ¼¯Æ÷³öÏֺ󣬡±ÍÌÍÂÁ¿ÓÅÏÈ¡°ÊÕ¼¯Æ÷ÖÕÓÚÓÐÁ˱ȽÏÃû¸±ÆäʵµÄÓ¦ÓÃ×£ºØ£¬ÔÚ×¢ÖØÍÌÍÂÁ¿¼°CPU×ÊÔ´Ãô¸ÐµÄ³¡ºÏ£¬¶¼¿ÉÒÔÓÅÏÈ¿¼ÂÇParallel
Scavenge¼ÓParallel OldÊÕ¼¯Æ÷¡£
-UseParallelGC: ÐéÄâ»úÔËÐÐÔÚServerģʽϵÄĬÈÏÖµ£¬´ò¿ª´Ë¿ª¹Øºó£¬Ê¹ÓÃParallel
Scavenge + Serial OldµÄÊÕ¼¯Æ÷×éºÏ½øÐÐÄÚ´æ»ØÊÕ¡£-UseParallelOldGC:
´ò¿ª´Ë¿ª¹Øºó£¬Ê¹ÓÃParallel Scavenge + Parallel OldµÄÊÕ¼¯Æ÷×éºÏ½øÐÐÀ¬»ø»ØÊÕ
CMSÊÕ¼¯Æ÷
CMS(Concurrent Mark Swep)ÊÕ¼¯Æ÷ÊÇÒ»¸ö±È½ÏÖØÒªµÄ»ØÊÕÆ÷£¬ÏÖÔÚÓ¦Ó÷dz£¹ã·º£¬ÎÒÃÇÖØµãÀ´¿´Ò»Ï£¬CMSÒ»ÖÖ»ñÈ¡×î¶Ì»ØÊÕÍ£¶Ùʱ¼äΪĿ±êµÄÊÕ¼¯Æ÷£¬ÕâʹµÃËüºÜÊʺÏÓÃÓÚºÍÓû§½»»¥µÄÒµÎñ¡£´ÓÃû×Ö(Mark
Swep)¾Í¿ÉÒÔ¿´³ö£¬CMSÊÕ¼¯Æ÷ÊÇ»ùÓÚ±ê¼ÇÇå³ýË㷨ʵÏֵġ£ËüµÄÊÕ¼¯¹ý³Ì·ÖΪËĸö²½Ö裺
³õʼ±ê¼Ç(initial mark)
²¢·¢±ê¼Ç(concurrent mark)
ÖØÐ±ê¼Ç(remark)
²¢·¢Çå³ý(concurrent sweep)
×¢Òâ³õʼ±ê¼ÇºÍÖØÐ±ê¼Ç»¹ÊÇ»ástop the world£¬µ«ÊÇÔںķÑʱ¼ä¸ü³¤µÄ²¢·¢±ê¼ÇºÍ²¢·¢Çå³ýÁ½¸ö½×¶Î¶¼¿ÉÒÔºÍÓû§½ø³Ìͬʱ¹¤×÷¡£
²»¹ýÓÉÓÚCMSÊÕ¼¯Æ÷ÊÇ»ùÓÚ±ê¼ÇÇå³ýË㷨ʵÏֵģ¬»áµ¼ÖÂÓдóÁ¿µÄ¿Õ¼äË鯬²úÉú£¬ÔÚΪ´ó¶ÔÏó·ÖÅäÄÚ´æµÄʱºò£¬ÍùÍù»á³öÏÖÀÏÄê´ú»¹ÓкܴóµÄ¿Õ¼äÊ£Ó࣬µ«ÊÇÎÞ·¨ÕÒµ½×ã¹»´óµÄÁ¬Ðø¿Õ¼äÀ´·ÖÅ䵱ǰ¶ÔÏ󣬲»µÃ²»Ìáǰ¿ªÆôÒ»´ÎFull
GC¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬CMSÊÕ¼¯Æ÷ĬÈÏÌṩÁËÒ»¸ö-XX:+UseCMSCompactAtFullCollectionÊÕ¼¯¿ª¹Ø²ÎÊý£¨Ä¬ÈϾÍÊÇ¿ªÆôµÄ)£¬ÓÃÓÚÔÚCMSÊÕ¼¯Æ÷½øÐÐFullGCÍ꿪ÆôÄÚ´æË鯬µÄºÏ²¢ÕûÀí¹ý³Ì£¬ÄÚ´æÕûÀíµÄ¹ý³ÌÊÇÎÞ·¨²¢·¢µÄ£¬ÕâÑùÄÚ´æË鯬ÎÊÌâµ¹ÊÇûÓÐÁË£¬²»¹ýÍ£¶Ùʱ¼ä²»µÃ²»±ä³¤¡£ÐéÄâ»úÉè¼ÆÕß»¹ÌṩÁËÁíÍâÒ»¸ö²ÎÊý-XX:CMSFullGCsBeforeCompaction²ÎÊýÓÃÓÚÉèÖÃÖ´ÐжàÉٴβ»Ñ¹ËõµÄFULL
GCºó¸ú×ÅÀ´Ò»´Î´øÑ¹ËõµÄ£¨Ä¬ÈÏֵΪ0£¬±íʾÿ´Î½øÈëFull GCʱ¶¼½øÐÐË鯬ÕûÀí£©¡£
²»ÐÒµÄÊÇ£¬Ëü×÷ΪÀÏÄê´úµÄÊÕ¼¯Æ÷£¬È´ÎÞ·¨Óëjdk1.4ÖÐÒѾ´æÔÚµÄÐÂÉú´úÊÕ¼¯Æ÷Parallel ScavengeÅäºÏ¹¤×÷£¬ËùÒÔÔÚjdk1.5ÖÐʹÓÃcmsÀ´ÊÕ¼¯ÀÏÄê´úµÄʱºò£¬ÐÂÉú´úÖ»ÄÜÑ¡ÔñParNew»òSerialÊÕ¼¯Æ÷ÖеÄÒ»¸ö¡£ParNewÊÕ¼¯Æ÷ÊÇʹÓÃ-XX:+UseConcMarkSweepGCÑ¡ÏîÆôÓÃCMSÊÕ¼¯Æ÷Ö®ºóµÄĬÈÏÐÂÉú´úÊÕ¼¯Æ÷£¬Ò²¿ÉÒÔʹÓÃ-XX:+UseParNewGCÑ¡ÏîÀ´Ç¿ÖÆÖ¸¶¨Ëü¡£
ÓÉÓÚCMSÊÕ¼¯Æ÷ÏÖÔڱȽϳ£Óã¬ÏÂÃæÎÒÃÇÔÙ¶îÍâÁ˽âÒ»ÏÂCMSËã·¨µÄ¼¸¸ö³£ÓòÎÊý£º
UseCMSInitatingOccupancyOnly£º±íʾֻÔÚµ½´ïãÐÖµµÄʱºò£¬²Å½øÐÐ CMS
»ØÊÕ¡£
ΪÁ˼õÉÙµÚ¶þ´ÎÔÝÍ£µÄʱ¼ä£¬Í¨¹ý-XX:+CMSParallelRemarkEnabled¿ªÆô²¢ÐÐremark¡£Èç¹ûramarkʱ¼ä»¹Êǹý³¤µÄ»°£¬¿ÉÒÔ¿ªÆô-XX:+CMSScavengeBeforeRemarkÑ¡Ïî£¬Ç¿ÖÆremark֮ǰ¿ªÆôÒ»´Îminor
gc£¬¼õÉÙremarkµÄÔÝͣʱ¼ä£¬µ«ÊÇÔÚremarkÖ®ºóÒ²Á¢¼´¿ªÊ¼Ò»´Îminor gc¡£
CMSĬÈÏÆô¶¯µÄ»ØÊÕÏß³ÌÊýÄ¿ÊÇ(ParallelGCThreads + 3)/4£¬Èç¹ûÄãÐèÒªÃ÷È·É趨£¬¿ÉÒÔͨ¹ý-XX:+ParallelCMSThreadsÀ´É趨£¬ÆäÖÐ-XX:+ParallelGCThreads´ú±íµÄÄêÇá´úµÄ²¢·¢ÊÕ¼¯Ïß³ÌÊýÄ¿¡£
CMSClassUnloadingEnabled£º ÔÊÐí¶ÔÀàÔªÊý¾Ý½øÐлØÊÕ¡£
CMSInitatingPermOccupancyFraction£ºµ±ÓÀ¾ÃÇøÕ¼ÓÃÂÊ´ïµ½ÕâÒ»°Ù·Ö±Èºó£¬Æô¶¯
CMS »ØÊÕ (ǰÌáÊÇ-XX:+CMSClassUnloadingEnabled ¼¤»îÁË)¡£
CMSIncrementalMode£ºÊ¹ÓÃÔöÁ¿Ä£Ê½£¬±È½ÏÊʺϵ¥ CPU¡£
UseCMSCompactAtFullCollection²ÎÊý¿ÉÒÔʹ CMS ÔÚÀ¬»øÊÕ¼¯Íê³Éºó£¬½øÐÐÒ»´ÎÄÚ´æË鯬ÕûÀí¡£ÄÚ´æË鯬µÄÕûÀí²¢²»ÊDz¢·¢½øÐеġ£
UseFullGCsBeforeCompaction£ºÉ趨½øÐжàÉÙ´Î CMS À¬»ø»ØÊպ󣬽øÐÐÒ»´ÎÄÚ´æÑ¹Ëõ¡£
һЩ½¨Òé
¶ÔÓÚNative Memory:
ʹÓÃÁËNIO»òÕßNIO¿ò¼Ü£¨Mina/Netty£©
ʹÓÃÁËDirectByteBuffer·ÖÅä×Ö½Ú»º³åÇø
ʹÓÃÁËMappedByteBuffer×öÄÚ´æÓ³Éä
ÓÉÓÚNative MemoryÖ»ÄÜͨ¹ýFullGC»ØÊÕ£¬ËùÒÔ³ý·ÇÄã·Ç³£Çå³þÕâÊ±ÕæµÄÓбØÒª£¬·ñÔò²»ÒªÇáÒ×µ÷ÓÃSystem.gc()¡£
ÁíÍâΪÁË·ÀֹijЩ¿ò¼ÜÖеÄSystem.gcµ÷Óã¨ÀýÈçNIO¿ò¼Ü¡¢Java RMI£©£¬½¨ÒéÔÚÆô¶¯²ÎÊýÖмÓÉÏ-XX:+DisableExplicitGCÀ´½ûÓÃÏÔʽGC¡£Õâ¸ö²ÎÊýÓиö¾Þ´óµÄ¿Ó£¬Èç¹ûÄã½ûÓÃÁËSystem.gc()£¬ÄÇôÉÏÃæµÄ3ÖÖ³¡¾°ÏµÄÄÚ´æ¾ÍÎÞ·¨»ØÊÕ£¬¿ÉÄÜÔì³ÉOOM£¬Èç¹ûÄãʹÓÃÁËCMS
GC£¬ÄÇô¿ÉÒÔÓÃÕâ¸ö²ÎÊýÌæ´ú£º-XX:+ExplicitGCInvokesConcurrent¡£
´ËÍâ³ýÁËCMSµÄGC£¬ÆäʵÆäËûÕë¶Ôold genµÄ»ØÊÕÆ÷¶¼»áÔÚ¶Ôold gen»ØÊÕµÄͬʱ»ØÊÕyoung
gen¡£
G1ÊÕ¼¯Æ÷
G1ÊÕ¼¯Æ÷ÊÇÒ»¿îÃæÏò·þÎñ¶ËÓ¦ÓõÄÀ¬»øÊÕ¼¯Æ÷¡£HotSpotÍŶӸ³ÓèËüµÄʹÃüÊÇÔÚδÀ´Ìæ»»µôJDK1.5Öз¢²¼µÄCMSÊÕ¼¯Æ÷¡£ÓëÆäËûGCÊÕ¼¯Æ÷Ïà±È£¬G1¾ß±¸ÈçÏÂÌØµã£º
²¢ÐÐÓë²¢·¢£ºG1Äܸü³ä·ÖµÄÀûÓÃCPU£¬¶àºË»·¾³ÏµÄÓ²¼þÓÅÊÆÀ´Ëõ¶Ìstop the worldµÄÍ£¶Ùʱ¼ä¡£
·Ö´úÊÕ¼¯£ººÍÆäËûÊÕ¼¯Æ÷Ò»Ñù£¬·Ö´úµÄ¸ÅÄîÔÚG1ÖÐÒÀÈ»´æÔÚ£¬²»¹ýG1²»ÐèÒªÆäËûµÄÀ¬»ø»ØÊÕÆ÷µÄÅäºÏ¾Í¿ÉÒÔ¶À×Ô¹ÜÀíÕû¸öGC¶Ñ¡£
¿Õ¼äÕûºÏ£ºG1ÊÕ¼¯Æ÷ÓÐÀûÓÚ³ÌÐò³¤Ê±¼äÔËÐУ¬·ÖÅä´ó¶ÔÏóʱ²»»áÎÞ·¨µÃµ½Á¬ÐøµÄ¿Õ¼ä¶øÌáǰ´¥·¢Ò»´ÎGC¡£
¿ÉÔ¤²âµÄ·ÇÍ£¶Ù£ºÕâÊÇG1Ïà¶ÔÓÚCMSµÄÁíÒ»´óÓÅÊÆ£¬½µµÍÍ£¶Ùʱ¼äÊÇG1ºÍCMS¹²Í¬µÄ¹Ø×¢µã£¬ÄÜÈÃʹÓÃÕßÃ÷È·Ö¸¶¨ÔÚÒ»¸ö³¤¶ÈΪMºÁÃëµÄʱ¼äƬ¶ÎÄÚ£¬ÏûºÄÔÚÀ¬»øÊÕ¼¯ÉϵÄʱ¼ä²»µÃ³¬¹ýNºÁÃë¡£
ÔÚʹÓÃG1ÊÕ¼¯Æ÷ʱ£¬Java¶ÑµÄÄÚ´æ²¼¾ÖºÍÆäËûÊÕ¼¯Æ÷ÓкܴóµÄ²î±ð£¬Ëü½«Õâ¸öJava¶Ñ·ÖΪ¶à¸ö´óСÏàµÈµÄ¶ÀÁ¢ÇøÓò£¬ËäÈ»»¹±£ÁôÐÂÉú´úºÍÀÏÄê´úµÄ¸ÅÄµ«ÊÇÐÂÉú´úºÍÀÏÄê´ú²»ÔÙÊÇÎïÀí¸ôÀëµÄÁË£¬ËüÃǶ¼ÊÇÒ»²¿·ÖRegion£¨²»ÐèÒªÁ¬Ðø£©µÄ¼¯ºÏ¡£
ËäÈ»G1¿´ÆðÀ´ÓкܶàÓŵ㣬ʵ¼ÊÉÏCMS»¹ÊÇÖ÷Á÷¡£
ÓëGCÏà¹ØµÄ³£ÓòÎÊý
³ýÁËÉÏÃæÌá¼°µÄһЩ²ÎÊý£¬ÏÂÃæ²¹³äһЩºÍGCÏà¹ØµÄ³£ÓòÎÊý£º
-Xmx: ÉèÖöÑÄÚ´æµÄ×î´óÖµ¡£
-Xms: ÉèÖöÑÄÚ´æµÄ³õʼֵ¡£
-Xmn: ÉèÖÃÐÂÉú´úµÄ´óС¡£
-Xss: ÉèÖÃÕ»µÄ´óС¡£
-PretenureSizeThreshold: Ö±½Ó½úÉýµ½ÀÏÄê´úµÄ¶ÔÏó´óС£¬ÉèÖÃÕâ¸ö²ÎÊýºó£¬´óÓÚÕâ¸ö²ÎÊýµÄ¶ÔÏó½«Ö±½ÓÔÚÀÏÄê´ú·ÖÅä¡£
-MaxTenuringThrehold: ½úÉýµ½ÀÏÄê´úµÄ¶ÔÏóÄêÁ䡣ÿ¸ö¶ÔÏóÔÚ¼á³Ö¹ýÒ»´ÎMinor
GCÖ®ºó£¬ÄêÁä¾Í»á¼Ó1£¬µ±³¬¹ýÕâ¸ö²ÎÊýֵʱ¾Í½øÈëÀÏÄê´ú¡£
-UseAdaptiveSizePolicy: ÔÚÕâÖÖģʽÏ£¬ÐÂÉú´úµÄ´óС¡¢eden ºÍ survivor
µÄ±ÈÀý¡¢½úÉýÀÏÄê´úµÄ¶ÔÏóÄêÁäµÈ²ÎÊý»á±»×Ô¶¯µ÷Õû£¬ÒÔ´ïµ½ÔÚ¶Ñ´óС¡¢ÍÌÍÂÁ¿ºÍÍ£¶Ùʱ¼äÖ®¼äµÄƽºâµã¡£ÔÚÊÖ¹¤µ÷ÓűȽÏÀ§Äѵij¡ºÏ£¬¿ÉÒÔÖ±½ÓʹÓÃÕâÖÖ×ÔÊÊÓ¦µÄ·½Ê½£¬½öÖ¸¶¨ÐéÄâ»úµÄ×î´ó¶Ñ¡¢Ä¿±êµÄÍÌÍÂÁ¿
(GCTimeRatio) ºÍÍ£¶Ùʱ¼ä (MaxGCPauseMills)£¬ÈÃÐéÄâ»ú×Ô¼ºÍê³Éµ÷ÓŹ¤×÷¡£
-SurvivorRattio: ÐÂÉú´úEdenÇøÓòÓëSurvivorÇøÓòµÄÈÝÁ¿±ÈÖµ£¬Ä¬ÈÏΪ8£¬´ú±íEden:
Suvivor= 8: 1¡£
-XX:ParallelGCThreads£ºÉèÖÃÓÃÓÚÀ¬»ø»ØÊÕµÄÏß³ÌÊý¡£Í¨³£Çé¿öÏ¿ÉÒÔºÍ CPU ÊýÁ¿ÏàµÈ¡£µ«ÔÚ
CPU ÊýÁ¿±È½Ï¶àµÄÇé¿öÏ£¬ÉèÖÃÏà¶Ô½ÏСµÄÊýÖµÒ²ÊǺÏÀíµÄ¡£
-XX:MaxGCPauseMills£ºÉèÖÃ×î´óÀ¬»øÊÕ¼¯Í£¶Ùʱ¼ä¡£ËüµÄÖµÊÇÒ»¸ö´óÓÚ 0 µÄÕûÊý¡£ÊÕ¼¯Æ÷ÔÚ¹¤×÷ʱ£¬»áµ÷Õû
Java ¶Ñ´óС»òÕ߯äËûһЩ²ÎÊý£¬¾¡¿ÉÄܵذÑÍ£¶Ùʱ¼ä¿ØÖÆÔÚ MaxGCPauseMills ÒÔÄÚ¡£
-XX:GCTimeRatio:ÉèÖÃÍÌÍÂÁ¿´óС£¬ËüµÄÖµÊÇÒ»¸ö 0-100 Ö®¼äµÄÕûÊý¡£¼ÙÉè GCTimeRatio
µÄֵΪ n£¬ÄÇôϵͳ½«»¨·Ñ²»³¬¹ý 1/(1+n) µÄʱ¼äÓÃÓÚÀ¬»øÊÕ¼¯¡£
|