原本æƒÏxŠŠé¢˜ç›®æ›´ç®€å•çš„å®šäØ“--《ä¸è¦åœã€‹çš„åQŒä½†˜q˜æ˜¯è‡ªå·±YY一下就½Ž—了ã€?br /> Javaå¼€å‘Server最大的障ç¢åQŒå°±æ˜¯JDK1.4版之å‰çš„的串行垃圾收集机制会引è“vé•¿æ—¶é—´çš„æœåŠ¡æš‚åœåQŒæ˜Žç™½åŽŸç†åŽåQŒæƒ³æƒ³é‚£äº›ç”¨JDK1.3写Server的先辈,ä¸å¾—ä¸åŽæ€•ã€?br /> 好在JDK1.4已开始支æŒå¤š¾U¿ç¨‹òq¶è¡Œçš„åŽå°åžƒåœ¾æ”¶é›†ç®—法,JDK5.0则优化了默认值的讄¡½®ã€?
一ã€å‚考资料:
二ã€åŸºæœ¬æ¦‚å¿?/strong>
1ã€å †(Heap)
JVM½Ž¡ç†çš„内å˜å«å †ã€‚在32Bitæ“作¾pÈ»Ÿä¸Šæœ‰1.5G-2Gçš„é™åˆÓž¼Œè€?4Bit的就没有ã€?
JVMåˆå§‹åˆ†é…的内å˜ç”±-Xms指定åQŒé»˜è®¤æ˜¯ç‰©ç†å†…å˜çš?/64但å°äº?Gã€?
JVM最大分é…的内å˜ç”?Xmx指定åQŒé»˜è®¤æ˜¯ç‰©ç†å†…å˜çš?/4但å°äº?Gã€?
默认½IÞZ½™å †å†…å˜å°äº?0%æ—Óž¼ŒJVMž®×ƒ¼šå¢žå¤§å †ç›´åˆ?Xmx的最大é™åˆÓž¼Œå¯ä»¥ç”?XX:MinHeapFreeRatio=指定ã€?
默认½IÞZ½™å †å†…å˜å¤§äº?0%æ—Óž¼ŒJVM会凞®‘å †ç›´åˆ°-Xms的最ž®é™åˆÓž¼Œå¯ä»¥ç”?XX:MaxHeapFreeRatio=指定ã€?
æœåŠ¡å™¨ä¸€èˆ¬è®¾¾|?Xmsã€?Xmx相ç‰ä»¥é¿å…åœ¨æ¯æ¬¡GC åŽè°ƒæ•´å †çš„大ž®ï¼Œæ‰€ä»¥ä¸Šé¢çš„ä¸¤ä¸ªå‚æ•°æ²¡å•¥ç”¨ã€?nbsp;
2.基本攉™›†½Ž—法
å¯è§åQŒæ²¡æœ‰å…费的åˆé¤åQŒæ— 论采用å¤åˆ¶è¿˜æ˜¯æ ‡è®°æ¸…除算法,自动的东襉Kƒ½è¦ä»˜å‡ºå¾ˆå¤§çš„æ€§èƒ½ä»£ähã€?
3.分代
分代是Java垃圾攉™›†çš„一大亮点,æ ÒŽ®å¯¹è±¡çš„生命周期长çŸï¼ŒæŠŠå †åˆ†äØ“3个代åQšYoungåQŒOldå’ŒPermanentåQŒæ ¹æ®ä¸åŒä»£çš„特炚w‡‡ç”¨ä¸åŒçš„æ”‰™›†½Ž—法åQŒæ‰¬é•‰K¿çŸä¹Ÿã€?
Young(Nursery)åQŒå¹´è½ÖM»£ã€‚ç ”½I¶è¡¨æ˜Žå¤§éƒ¨åˆ†å¯¹è±¡éƒ½æ˜¯æœç”Ÿæš®æ»åQŒéšç”Ÿéšççš„ã€‚å› æ¤æ‰€æœ‰æ”¶é›†å™¨éƒ½äØ“òq´è½»ä»£é€‰æ‹©äº†å¤åˆ¶ç®—法ã€?br /> å¤åˆ¶½Ž—法优点是åªè®‰K—®‹z»è·ƒå¯¹è±¡åQŒç¼ºç‚ÒŽ˜¯å¤åˆ¶æˆæœ¬é«˜ã€‚å› ä¸ºå¹´è½ÖM»£åªæœ‰ž®‘é‡çš„对象能熬到垃圾攉™›†åQŒå› æ¤åªéœ€ž®‘é‡çš„å¤åˆ¶æˆæœ¬ã€‚而且å¤åˆ¶æ”‰™›†å™¨åªè®‰K—®‹z»è·ƒå¯¹è±¡åQŒå¯¹é‚£äº›å 了最大比率的æÕd¯¹è±¡è§†è€Œä¸è§ï¼Œå……åˆ†å‘æŒ¥äº†å®ƒé历½Iºé—´æˆæœ¬ä½Žçš„优点ã€?
Young的默认å€égØ“4MåQŒéšå †å†…å˜å¢žå¤§ï¼Œ¾U¦äØ“1/15åQŒJVMä¼šæ ¹æ®æƒ…况动æ€ç®¡ç†å…¶å¤§å°å˜åŒ–ã€?br /> -XX:NewRatio= 傿•°å¯ä»¥è®„¡½®Young与Old的大ž®æ¯”例,-serveræ—‰™»˜è®¤äØ“1:2åQŒä½†å®žé™…上youngå¯åŠ¨æ—¶è¿œä½ŽäºŽ˜q™ä¸ªæ¯”率åQŸå¦‚果信ä¸è¿‡JVMåQŒä¹Ÿå¯ä»¥ç”?Xmn¼‹¬æ€§è§„定其大å°åQŒæœ‰æ–‡æ¡£æŽ¨èè®¾äØ“Heapæ€Õd¤§ž®çš„1/4ã€?
Young的大ž®éžå¸”Ržå¸”R‡è¦ï¼Œè§?#8220;åŽé¢æš‚åœæ—‰™—´ä¼˜å…ˆæ”‰™›†å™?#8221;的论˜q°ã€?
Young里é¢åˆåˆ†ä¸?个区域,一个EdenåQŒæ‰€æœ‰æ–°å»ºå¯¹è±¡éƒ½ä¼šå˜åœ¨äºŽè¯¥åŒºåQŒä¸¤ä¸ªSurvivor区,用æ¥å®žæ–½å¤åˆ¶½Ž—法。毋ơå¤åˆ¶å°±æ˜¯å°†Eden和第一å—Survior的活对象å¤åˆ¶åˆ°ç¬¬2å—ï¼Œç„¶åŽæ¸…空Eden与第一å—Survior。Eden与Survivor的比例由-XX:SurvivorRatio=讄¡½®åQŒé»˜è®¤äØ“32。Survivio大了会浪费,ž®äº†çš„è¯åQŒä¼šä½¿ä¸€äº›å¹´è½Õd¯¹è±¡æ½œé€ƒåˆ°è€äh区,引è“vè€äh区的ä¸å®‰åQŒä½†˜q™ä¸ªå‚æ•°å¯ÒŽ€§èƒ½òq¶ä¸é‡è¦ã€?nbsp;
Old(Tenured)åQŒå¹´è€ä»£ã€‚å¹´è½ÖM»£çš„对象如果能够挺˜q‡æ•°‹Æ¡æ”¶é›†ï¼Œž®×ƒ¼š˜q›å…¥è€äh区。è€ähåŒÞZ‹Éç”¨æ ‡è®°æ•´ç†ç®—æ³•ã€‚å› ä¸ø™€äh区的对象都没那么å®ÒŽ˜“æÈš„åQŒé‡‡ç”¨å¤åˆ¶ç®—法就è¦åå¤çš„å¤åˆ¶å¯¹è±¡åQŒå¾ˆä¸åˆ½Ž—,åªå¥½é‡‡ç”¨æ ‡è®°æ¸…ç†½Ž—æ³•åQŒä½†æ ‡è®°æ¸…ç†½Ž—æ³•å…¶å®žä¹Ÿä¸è½ÀL¾åQŒæ¯‹Æ¡éƒ½è¦é历区域内所有对象,所以还是没有å…费的åˆé¤å•Šã€?
-XX:MaxTenuringThreshold=讄¡½®ç†¬è¿‡òq´è½»ä»£å¤šž®‘次攉™›†åŽç§»å…¥è€äh区,CMSä¸é»˜è®¤äØ“0åQŒç†¬˜q‡ç¬¬ä¸€‹Æ¡GCž®Þp{入,å¯ä»¥ç”?XX:+PrintTenuringDistribution查看ã€?
PermanentåQŒæŒä¹…代ã€?/strong>装è²Class信毽{‰åŸº¼‹€æ•°æ®åQŒé»˜è®?4MåQŒå¦‚果是¾cÕd¾ˆå¤šå¾ˆå¤šçš„æœåŠ¡½E‹åºåQŒéœ€è¦åŠ å¤§å…¶è®„¡½®-XX:MaxPermSize=åQŒå¦åˆ™å®ƒæ»¡äº†ä¹‹åŽä¼šå¼•èµ·fullgc()或Out of Memoryã€?注æ„SpringåQŒHibernate˜q™ç±»å–œæ¬¢AOP动æ€ç”Ÿæˆç±»çš„æ¡†æž‰™œ€è¦æ›´å¤šçš„æŒä¹…ä»£å†…å˜ã€?
4.minor/major collection
æ¯ä¸ªä»£æ»¡äº†ä¹‹åŽéƒ½ä¼šä¿ƒå‘collectionåQŒï¼ˆå¦å¤–Concurrent Low Pause Collector默认在è€ähåŒ?8%的时候促å?。GC用较高的频率对young˜q›è¡Œæ‰«æå’Œå›žæ”Óž¼Œ˜q™ç§å«åšminor collectionã€?br /> è€Œå› ä¸ºæˆæœ¬å…³¾pÕd¯¹Old的检查回攉™¢‘率è¦ä½Žå¾ˆå¤šï¼ŒåŒæ—¶å¯¹Youngå’ŒOld的收集称为major collectionã€?br /> System.gc()会引å‘major collectionåQŒä‹Éç”?XX:+DisableExplicitGC¼›æ¢å®ƒï¼Œæˆ–设为CMSòq¶å‘-XX:+ExplicitGCInvokesConcurrentã€?
5.ž®ç»“
Young -- minor collection -- å¤åˆ¶½Ž—法
Old(Tenured) -- major colletion -- æ ‡è®°æ¸…é™¤/æ ‡è®°æ•´ç†½Ž—æ³•
ä¸‰ã€æ”¶é›†å™¨
1.å¤è€çš„串行攉™›†å™?Serial Collector)
使用 -XX:+UseSerialGCåQŒç–ç•¥äØ“òq´è½»ä»£ä¸²è¡Œå¤åˆÓž¼Œòq´è€ä»£ä¸²è¡Œæ ‡è®°æ•´ç†ã€?
2.åžåé‡ä¼˜å…ˆçš„òq¶è¡Œæ”‰™›†å™?Throughput Collector)
使用 -XX:+UseParallelGC åQŒä¹Ÿæ˜¯JDK5 -server的默认倹{€‚ç–ç•¥äØ“åQ?br /> 1.òq´è½»ä»£æš‚åœåº”用程åºï¼Œå¤šä¸ªåžƒåœ¾æ”‰™›†¾U¿ç¨‹òq¶è¡Œçš„å¤åˆ¶æ”¶é›†ï¼Œ¾U¿ç¨‹æ•°é»˜è®¤äØ“CPU个数åQŒCPU很多æ—Óž¼Œå¯ç”¨–XX:ParallelGCThreads=å‡å°‘¾U¿ç¨‹æ•°ã€?br /> 2.òq´è€ä»£æš‚åœåº”用½E‹åºåQŒä¸Žä¸²è¡Œæ”‰™›†å™¨ä¸€æ øP¼Œå•垃圾收集线½E‹æ ‡è®°æ•´ç†ã€?
所以需è¦?+çš„CPUæ—¶æ‰ä¼šä¼˜äºŽä¸²è¡Œæ”¶é›†å™¨åQŒé€‚用于åŽå°å¤„ç†ï¼Œ¿U‘å¦è®¡ç®—ã€?
å¯ä»¥ä½¿ç”¨-XX:MaxGCPauseMillis= å’?-XX:GCTimeRatio æ¥è°ƒæ•´GC的时间ã€?
3.æš‚åœæ—‰™—´ä¼˜å…ˆçš„åÆˆå‘æ”¶é›†å™¨(Concurrent Low Pause Collector-CMS)
å‰é¢è¯´äº†˜q™ä¹ˆå¤šï¼Œéƒ½æ˜¯ä¸ÞZº†˜q™èŠ‚åšé“ºåž?.....
使用-XX:+UseConcMarkSweepGCåQŒç–ç•¥äØ“åQ?br /> 1.òq´è½»ä»£åŒæ äh˜¯æš‚åœåº”用½E‹åºåQŒå¤šä¸ªåžƒåœ¾æ”¶é›†çº¿½E‹åƈ行的å¤åˆ¶æ”‰™›†ã€?br /> 2.òq´è€ä»£åˆ™åªæœ‰ä¸¤‹Æ¡çŸæš‚åœåQŒå…¶ä»–时间应用程åºä¸Žæ”‰™›†¾U¿ç¨‹òq¶å‘的清除ã€?
3.1 òq´è€ä»£è¯¦è¿°
òq¶è¡Œ(Parallel)ä¸ŽåÆˆå?Concurrent)仅一å—之差,òq¶è¡ŒæŒ‡å¤šæ¡åžƒåœ¾æ”¶é›†çº¿½E‹åƈ行,òq¶å‘指用æˆïLº¿½E‹ä¸Žåžƒåœ¾æ”‰™›†¾U¿ç¨‹òq¶å‘åQŒç¨‹åºåœ¨¾l§ç®‹˜q行åQŒè€Œåžƒåœ¾æ”¶é›†ç¨‹åºè¿è¡ŒäºŽå¦ä¸€ä¸ªä¸ªCPU上ã€?
òq¶å‘攉™›†ä¸€å¼€å§‹ä¼šå¾ˆçŸæš‚çš„åœæ¢ä¸€‹Æ¡æ‰€æœ‰çº¿½E‹æ¥å¼€å§‹åˆå§‹æ ‡è®°æ ¹å¯¹è±¡åQŒç„¶åŽæ ‡è®°çº¿½E‹ä¸Žåº”用¾U¿ç¨‹ä¸€èµ·åƈå‘è¿è¡Œï¼Œæœ€åŽåˆå¾ˆçŸçš„æš‚åœä¸€‹Æ¡ï¼Œå¤šçº¿½E?strong>òq¶è¡Œçš„釿–°æ ‡è®îC¹‹å‰å¯èƒ½å› ä¸ºåÆˆå‘è€Œæ¼æŽ‰çš„å¯¹è±¡åQŒç„¶åŽå°±å¼€å§‹ä¸Žåº”用½E‹åºòq¶å‘的清除过½E‹ã€‚å¯è§ï¼Œæœ€é•¿çš„两个é历˜q‡ç¨‹éƒ½æ˜¯ä¸Žåº”用程åºåÆˆå‘æ‰§è¡Œçš„åQŒæ¯”以å‰çš„串行算法改˜q›å¤ªå¤šå¤ªå¤šäº†åQï¼åQ?
ä¸²è¡Œæ ‡è®°æ¸…é™¤æ˜¯ç‰òq´è€ä»£æ»¡äº†å†å¼€å§‹æ”¶é›†çš„åQŒè€ŒåÆˆå‘æ”¶é›†å› 䏸™¦ä¸Žåº”用程åºä¸€èµ¯‚¿è¡Œï¼Œå¦‚æžœæ»¡äº†æ‰æ”¶é›†ï¼Œåº”用½E‹åºž®±æ— 内å˜å¯ç”¨åQŒæ‰€ä»¥ç³»¾lŸé»˜è®?8%满的时候就开始收集。内å˜å·²è®‘Ö¾—较大åQŒåƒå†…å˜åˆæ²¡æœ‰è¿™ä¹ˆå¿«çš„æ—¶å€™ï¼Œå¯ä»¥ç”?XX:CMSInitiatingOccupancyFraction=æ°å½“增大该比率ã€?
3.2 òq´è½»ä»£è¯¦˜q?/strong>
坿ƒœå¯¹å¹´è½ÖM»£çš„å¤åˆ¶æ”¶é›†ï¼Œä¾ç„¶å¿…é¡»åœæ¢æ‰€æœ‰åº”用程åºçº¿½E‹ï¼ŒåŽŸç†å¦‚æ¤åQŒåªèƒ½é 多CPUåQŒå¤šæ”‰™›†¾U¿ç¨‹òq¶å‘æ¥æé«˜æ”¶é›†é€Ÿåº¦åQŒä½†é™¤éžä½ çš„Serverç‹¬å æ•´å°æœåŠ¡å™¨ï¼Œå¦åˆ™å¦‚æžœæœåŠ¡å™¨ä¸Šæœ¬èín˜q˜æœ‰å¾ˆå¤šå…¶ä»–¾U¿ç¨‹æ—Óž¼Œåˆ‡æ¢èµäh¥é€Ÿåº¦ž®?.... 所以,æžåˆ°æœ€åŽï¼Œæš‚åœæ—‰™—´çš„瓶颈就è½åœ¨äº†å¹´è½ÖM»£çš„å¤åˆ¶ç®—法上ã€?
å› æ¤Young的大ž®è®¾¾|®æŒºé‡è¦çš„,大点ž®×ƒ¸ç”¨é¢‘¾JGCåQŒè€Œä¸”增大GC的间隔åŽåQŒå¯ä»¥è®©å¤šç‚¹å¯¹è±¡è‡ªå·±æÀLŽ‰è€Œä¸ç”¨å¤åˆ¶äº†ã€‚但Young增大æ—Óž¼ŒGCé€ æˆçš„åœ™å¿æ—¶é—´æ”€å‡å¾—éžå¸¸ææ€–,比如在我的机器上åQŒé»˜è®?Mçš„YoungåQŒåªéœ€è¦å‡ 毫秒的时é—ß_¼Œ64Mž®±å‡åˆ?0毫秒åQŒè€Œå‡åˆ?56Mæ—Óž¼Œž®Þp¦åˆ?00æ¯«ç§’äº†ï¼Œå³°å€ÆD¿˜ä¼šæ”€åˆ°ææ€–çš„800ms。è°å«å¤åˆ¶ç®—法,è¦ç‰Young满了æ‰å¼€å§‹æ”¶é›†ï¼Œå¼€å§‹æ”¶é›†å°±è¦åœæ¢æ‰€æœ‰çº¿½E‹å‘¢ã€?
3.3 æŒä¹…ä»?/strong>
å¯è®¾¾|?XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabledåQŒä‹ÉCMS攉™›†æŒä¹…代的¾c»ï¼Œè€Œä¸æ˜¯fullgcåQŒnetbeans5.5 performance文档的推èã€?/code>
4.增é‡(train½Ž—法)攉™›†å™?Incremental Collector)
å·²åœæ¢ç»´æŠ¤ï¼Œ–Xincgcé€‰é¡¹é»˜è®¤è½¬äØ“òq¶å‘攉™›†å™¨ã€?
å››ã€æš‚åœæ—¶é—´æ˜¾½C?/strong>
åŠ å…¥ä¸‹åˆ—å‚æ•° (请将PrintGCå’ŒDetailsä¸é—´çš„ç©ºæ ¼åŽ»æŽ‰ï¼ŒCSDNå¾ˆæ€ªçš„è®¤äØ“æ˜¯ç¦æ¢å—å¥ï¼‰
-verbose:gc -XX:+PrintGC Details -XX:+PrintGCTimeStamps
会程åºè¿è¡Œè¿‡½E‹ä¸ž®†æ˜¾½Cºå¦‚下输å‡?
9.211: [GC 9.211: [ParNew: 7994K->0K(8128K), 0.0123935 secs] 427172K->419977K(524224K), 0.0125728 secs]
昄¡¤ºåœ¨ç¨‹åºè¿è¡Œçš„9.211¿U’å‘生了Minor的垃圾收集,å‰ä¸€ŒD‰|•°æ®é’ˆå¯ÒŽ–°ç”ŸåŒºåQŒä»Ž7994kæ•´ç†ä¸?kåQŒæ–°ç”ŸåŒºæ€Õd¤§ž®äØ“8128kåQŒç¨‹åºæš‚åœäº†12msåQŒè€ŒåŽä¸€ŒD‰|•°æ®é’ˆå¯ÒŽ•´ä¸ªå †ã€?
对于òq´è€ä»£çš„æ”¶é›†ï¼Œæš‚åœå‘生在下é¢ä¸¤ä¸ªé˜¶ŒDµï¼ŒCMS-remarkçš„ä¸æ–是17毫秒åQ?
[GC [1 CMS-initial-mark: 80168K(196608K)] 81144K(261184K), 0.0059036 secs]
[1 CMS-remark: 80168K(196608K)] 82493K(261184K),0.0168943 secs]
å†åŠ ä¸¤ä¸ªå‚æ•° -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTimeå¯ÒŽš‚åœæ—¶é—´çœ‹å¾—更清晰ã€?
五ã€çœŸæ£ä¸åœçš„BEA JRockit 与Sun RTS2.0
Beaçš?a >JRockit 5.0 R27 的特色之一是动æ€å†³å®šçš„垃圾攉™›†½{–ç•¥åQŒç”¨æˆ·å¯ä»¥å†³å®šè‡ªå·±å…³å¿ƒçš„æ˜¯åžåé‡åQŒæš‚åœæ—¶é—´è¿˜æ˜¯ç¡®å®šçš„æš‚åœæ—‰™—´åQŒå†ç”±JVM在è¿è¡Œæ—¶åЍæ€å†³å®šã€æ”¹å˜æ”¹å˜åžƒåœ¾æ”¶é›†ç–ç•¥ã€?br />
它的Deterministic GC的选项æ˜?Xgcprio: deterministicåQŒå·¿U°å¯ä»¥æŠŠæš‚åœå¯ä»¥æŽ§åˆ¶åœ?0-30毫秒åQŒéžå¸¸çš„牛,一å¥Deterministicé“尽了RealTime的真谛ã€?ä¸è¿‡¾l†çœ‹ä¸€ä¸‹æ–‡æ¡£ï¼Œ30ms的测试环境是1 GB heap å’?òq›_‡ 30% 的活跃对è±?也就æ˜?00M)‹zÕdŠ¨å¯¹è±¡åQ? ä¸?Xeon 3.6 GHz 4Gå†…å˜ åQŒæˆ–者是4 个Xeon 2.0 GHzåQ?G内å˜ã€?
æœ€å¯æƒœJRocktçš„license很奇怪,虽然òqÏx—¶ä½¿ç”¨å…è´¹åQŒä½†˜q™ä¸ª30ms的选项ž®±éœ€è¦è´ä¹°æ•´ä¸ªWeblogic Real Time Serverçš„licenseã€?nbsp;
å…¶ä»–å…费选项åQŒæœ‰åQ?/p>
- -Xgcprio:pausetime -Xpausetarget=210ms
å› äØ“å…è´¹åQŒæ‰€ä»¥æœ€ä½Žåªèƒ½è®¾¾|®åˆ°200ms pause targetã€?nbsp;200ms是Sunè®¤äØ“Real-Time的分界线ã€?
- -Xgc:gencon
普通的òq¶å‘åšæ³•åQŒæ•ˆçŽ‡ä¹Ÿä¸é”™ã€?
JavaOne2007上有Sunçš?Java Real-Time System 2.0 的介¾l,RTS2.0åŸÞZºŽJDK1.5åQŒåœ¨Real-Time Garbage Collctorä¸Šåˆæœ‰æ”¹˜q›ï¼Œä½†è¿˜åœ¨beta版状æ€ï¼Œåªä¾›¾l™OEMåQŒæ›´æ€ªã€?
å…ã€JDK 6.0的改˜q?/strong>
å› äØ“JDK5.0在Young较大时的表现˜q˜æ˜¯ä¸å¤Ÿè®©äh满æ„åQŒåˆ¾l§ç®‹çœ‹JDK6.0的改˜q›ï¼Œ¾l“æžœ½Eç¨å¤±æœ›åQŒä¸æ¶‰åŠæˆ‘最头痛的年è½ÖM»£å¤åˆ¶æ”‰™›†æ”¹è‰¯ã€?
1.òq´è€ä»£çš„æ ‡è¯?清除攉™›†åQŒåÆˆè¡Œæ‰§è¡Œæ ‡è¯?/strong>
JDK5.0åªå¼€äº†ä¸€æ¡æ”¶é›†è¿›½E‹ä¸Žåº”用¾U¿ç¨‹òq¶å‘æ ‡è¯†åQŒè€?.0å¯ä»¥å¼€å¤šæ¡æ”‰™›†¾U¿ç¨‹æ¥åšæ ‡è¯†åQŒç¾ƒçŸæ ‡è¯†è€äh区所有活动对象的旉™—´ã€?
2.åŠ å¤§äº†Young区的默认大å°
默认大å°ä»?MåŠ åˆ°16MåQŒä»Žå †å†…å˜çš„1/15å¢žåŠ åˆ?/7
3.System.gc()å¯ä»¥ä¸Žåº”用程åºåÆˆå‘æ‰§è¡?/strong>
使用-XX:+ExplicitGCInvokesConcurrent 讄¡½®
七ã€å°¾l?/strong>
1. JDK5.0/6.0
对于æœåŠ¡å™¨åº”ç”¨ï¼Œæˆ‘ä»¬ä½¿ç”¨Concurrent Low Pause CollectoråQŒå¯¹òq´è½»ä»£ï¼Œæš‚åœæ—¶å¤š¾U¿ç¨‹òq¶è¡Œå¤åˆ¶æ”‰™›†åQ›å¯¹òq´è€ä»£åQŒæ”¶é›†å™¨ä¸Žåº”用程åºåÆˆè¡Œæ ‡è®?-æ•´ç†æ”‰™›†åQŒä»¥è¾‘Öˆ°ž®½é‡çŸçš„垃圾攉™›†æ—‰™—´ã€?
æœ¬ç€æ²¡æœ‰æ·±åˆ»‹¹‹è¯•å‰ä¸è¦èƒ¡ä¹×ƒ¼˜åŒ–的宗旨åQŒå‘½ä»¤è¡Œå±žæ€§åªéœ€½Ž€å•写为:
-server -Xms<heapsize>M -Xmx<heapsize>M -XX:+UseConcMarkSweepGC -XX:+PrintGC Details -XX:+PrintGCTimeStamps
ç„¶åŽè¦æ ¹æ®åº”用的情况åQŒåœ¨‹¹‹è¯•软äšg辅助å¯ä»¥ä¸‹çœ‹çœ‹æœ‰æ²¡æœ‰JVM的默认值和自动½Ž¡ç†åšçš„ä¸å¤Ÿçš„地方å¯ä»¥è°ƒæ•ß_¼Œå¦?xmn 设Young的大ž®ï¼Œ-XX:MaxPermSize设æŒä¹…代大尽{‰ã€?
2. JRockit 6.0 R27.2
ä½†å› ä¸ºJDK5的测试结果实在ä¸èƒ½æ»¡æ„ï¼ŒåŽæ¥åˆå°è¯•了JRockitåQŒæ€ÖM½“效果è¦å¥½äº›ã€?br />
JRockit的特ç‚ÒŽ˜¯åЍæ€åžƒåœ¾æ”¶é›†å™¨æ˜¯æ ¹æ®ç”¨æˆ·å…³å¿ƒçš„特å¾åЍæ€å†³å®šæ”¶é›†ç®—法的åQŒå‚数如ä¸?/p>
-Xms<heapsize>M -Xmx<heapsize>M -Xgcprio:pausetime -Xpausetarget=200ms -XgcReport -XgcPause -Xverbose:memory

柯西 2007-11-05 21:22 å‘表评论]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º
Îâ½ÊÐ|
ÓÀÐËÏØ|
¸·³ÇÏØ|
ÖÛÇúÏØ|
×ÓÖÞÏØ|
ÓÀÖÝÊÐ|
Ñ·¿ËÏØ|
Ä«ÍÑÏØ|
ÌØ¿ËË¹ÏØ|
ÄÏÕÙÏØ|
ººÔ´ÏØ|
µ¤·ïÏØ|
»ÆÁúÏØ|
ÓàÇìÏØ|
±£¿µÏØ|
ÁijÇÊÐ|
ÖÜÄþÏØ|
ÆÁÄÏÏØ|
°×³ÇÊÐ|
¸·ÐÂÊÐ|
µü²¿ÏØ|
ÎÞé¦ÏØ|
ÐÐÌÆÏØ|
ÎÚÇ¡ÏØ|
¶«Ã÷ÏØ|
·áÏØ|
Ò˾ýÏØ|
Ì¨Ç°ÏØ|
³¤º£ÏØ|
ÃÖ¶ÉÏØ|
аͶû»¢ÓÒÆì|
ÍÁêÊÐ|
Îâ´¨ÊÐ|
Í¼Ä¾Êæ¿ËÊÐ|
ÇɼÒÏØ|
¿ªÔ¶ÊÐ|
¹ãºÓÏØ|
н®|
ÊæÀ¼ÊÐ|
Ò˶¼ÊÐ|
ºâÉ½ÏØ|