本机已ç»å®‰è£…了jdk1.6åQŒè€Œæ¯”较早期的™å¹ç›®éœ€è¦ä¾èµ–jdk1.5åQŒäºŽæ˜¯åŒæ—¶åœ¨æœ¬æœºå®‰è£…了jdk1.5å’Œjdk1.6.
安装jdk1.5å‰ï¼Œæ‰§è¡Œjava -version得到
java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)
安装完jdk1.5,òq¶ä¿®æ”¹çŽ¯å¢ƒå˜é‡JAVA_HOME为D:\devSoftware\jdk1.5.冿‰§è¡?nbsp;java -versionæ—Óž¼Œä¾ç„¶æ˜„¡¤ºåQ?/p>
java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, mixed mode)
看上去,新的环境å˜é‡JAVA_HOME=D:\devSoftware\jdk1.5òq¶æ²¡æœ‰ç”Ÿæ•ˆã€?在网上找了很多资料æ‰å‘现åQ?/p>
在安装JDK1.6æ—Óž¼ˆæœ¬æœºå…ˆå®‰è£…jdk1.6å†å®‰è£…çš„jdk1.5åQ‰ï¼Œè‡ªåЍž®†java.exeã€javaw.exeã€javaws.exeä¸‰ä¸ªå¯æ‰§è¡Œæ–‡ä»¶å¤åˆ¶åˆ°äº†C:\Windows\System32目录åQŒç”±äºŽè¿™ä¸ªç›®å½•在WINDOWS环境å˜é‡ä¸çš„优先¾U§é«˜äºŽJAVA_HOME讄¡½®çš„环境å˜é‡ä¼˜å…ˆçñ”
解决æ–ÒŽ(gu¨©)¡ˆåQšå°†java.exe,javaw.exe,javaws.exeåˆ é™¤å›_¯ã€‚开坿–°çš„命令行½H—å£åQŒå†æ‰§è¡Œjava -versionæ—Óž¼Œž®±å¾—åˆîCº†æœŸæœ›ä¸çš„¾l“æžœ
java version "1.5.0_17"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_17-b04)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_17-b04, mixed mode)
1ã€Web Client å‘Servlet容器åQˆTomcatåQ‰å‘出Httpè¯äh±‚
2ã€Servlet容器接收Web Client的请æ±?/span>
3ã€Servlet容器创å¾ä¸€ä¸ªHttpRequest对象åQŒå°†Web Clientè¯äh±‚的信æ¯å°è£…到˜q™ä¸ªå¯¹è±¡ä¸?/span>
4ã€Servlet容器创å¾ä¸€ä¸ªHttpResponse对象
5ã€Servlet容器调用HttpServlet对象的serviceæ–ÒŽ(gu¨©)³•åQŒæŠŠHttpRequest对象与HttpResponseå¯¹è±¡ä½œäØ“å‚æ•°
ä¼ ç»™ HttpServlet对象
6ã€HttpServlet调用HttpRequest对象的有å…Ïx–¹æ³•,获å–Httpè¯äh±‚ä¿¡æ¯
7ã€HttpServlet调用HttpResponse对象的有å…Ïx–¹æ³•,生æˆå“应数æ®
8ã€Servlet容器把HttpServletçš„å“åº”ç»“æžœä¼ ¾l™Web Client
对于Servlet容器(Tomcat)与HttpServletæ˜¯æ€Žæ ·˜q›è¡Œäº¤äº’的呢åQŒçœ‹ä¸‹ç±»å›?/p>
Servlet的框架是ç”׃¸¤ä¸ªJava包组æˆçš„åQšjavax.servlet与javax.servlet.http。在javax.servlet包ä¸å®šä¹‰äº†æ‰€æœ‰çš„Servlet¾c»éƒ½å¿…须实现或者扩展的通用接å£å’Œç±»ã€‚在javax.servlet.http包ä¸å®šä¹‰äº†é‡‡ç”¨Httpå议通信的HttpServlet¾c…R€‚Servletçš„æ¡†æž¶çš„æ ¸å¿ƒæ˜¯javax.servlet.Servlet接å£åQŒæ‰€æœ‰çš„Servlet都必™åÕd®žçŽ°è¿™ä¸ªæŽ¥å£ã€?/p>
在Servlet接å£ä¸å®šä¹‰äº†5个方法,
å…¶ä¸3个方法代表了Servlet的生命周期:
1ã€initæ–ÒŽ(gu¨©)³•åQšè´Ÿè´£åˆå§‹åŒ–Servlet对象ã€?/span>
2ã€serviceæ–ÒŽ(gu¨©)³•åQšè´Ÿè´£å“应客æˆïLš„è¯äh±‚ã€?/span>
3ã€destroyæ–ÒŽ(gu¨©)³•åQšå½“Servlet对象退出生命周期时åQŒè´Ÿè´£é‡Šæ”‘Ö ç”¨çš„èµ„æºã€?/span>
一ã€åˆ›å»ºServlet对象的时æœ?/strong>
1ã€Servlet容器å¯åЍæ—Óž¼šè¯Õd–web.xmlé…置文äšgä¸çš„ä¿¡æ¯åQŒæž„é€ æŒ‡å®šçš„Servlet对象åQŒåˆ›å»ºServletConfig对象åQŒåŒæ—¶å°†ServletConfigå¯¹è±¡ä½œäØ“å‚æ•°æ¥è°ƒç”¨Servlet对象的initæ–ÒŽ(gu¨©)³•ã€?/p>
2ã€åœ¨Servlet容器å¯åЍåŽï¼šå®¢æˆ·é¦–次å‘Servletå‘出è¯äh±‚åQŒServlet容器会判æ–内å˜ä¸æ˜¯å¦å˜åœ¨æŒ‡å®šçš„Servlet对象åQŒå¦‚果没有则创å¾å®ƒï¼Œç„¶åŽæ ÒŽ(gu¨©)®å®¢æˆ·çš„请求创建HttpRequestã€?nbsp; HttpResponse对象åQŒä»Žè€Œè°ƒç”¨Servlet
对象的serviceæ–ÒŽ(gu¨©)³•ã€?/p>
3ã€Servlet的类文äšg被更新åŽåQŒé‡æ–°åˆ›å»ºServlet
Servlet容器在å¯åŠ¨æ—¶è‡ªåŠ¨åˆ›å¾ServletåQŒè¿™æ˜¯ç”±åœ¨web.xmlæ–‡äšgä¸äØ“Servlet讄¡½®çš?lt;load-on-startup>属性决å®?/p>
çš„ã€‚ä»Žä¸æˆ‘们也能看到åŒä¸€ä¸ªç±»åž‹çš„Servlet对象在Servlet容器ä¸ä»¥å•例的åÅžå¼å˜åœ¨ã€?/p>
二ã€é”€æ¯Servlet对象的时æœ?/strong>
1ã€?span style="color: #ff0000;">Servletå®¹å™¨åœæ¢æˆ–è€…é‡æ–°å¯åŠ?/span>åQšServlet容器调用Servlet对象的destroyæ–ÒŽ(gu¨©)³•æ¥é‡Šæ”¾èµ„æºã€‚以上所讲的ž®±æ˜¯Servlet对象的生命周期。那么Servlet容器如何知é“创å¾å“ªä¸€ä¸ªServlet对象åQ?/p>
Servlet对象如何é…ç½®åQŸå®žé™…上˜q™äº›ä¿¡æ¯æ˜¯é€šè¿‡è¯Õd–web.xmlé…置文äšgæ¥å®žçŽ°çš„ã€?/p>
我们æ¥çœ‹ä¸€ä¸‹web.xmlæ–‡äšgä¸çš„Servlet对象的酾|®èŠ‚ä¿¡æ¯
åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQ?/p>
<servlet>
<servlet-name>action<servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼
下é¢å¯¹ä¸Šé¢çš„é…置节信æ¯è¿›è¡Œè§£æž?/p>
servlet-nameåQšServlet对象的å¿U?/p>
servlet-classåQšåˆ›å»ºServlet对象所è¦è°ƒç”¨çš„¾c?/p>
param-nameåQšå‚æ•°å¿U?/p>
param-valueåQšå‚æ•°å€?/p>
load-on-startupåQšServlet容器å¯åŠ¨æ—¶åŠ è½½Servlet对象的顺åº?/p>
servlet-mapping/servlet-nameåQšè¦ä¸Žservletä¸çš„servlet-nameé…置节内容对åº?/p>
url-patternåQšå®¢æˆ¯‚®¿é—®çš„Servlet的相对URL路径
当Servlet容器å¯åŠ¨çš„æ—¶å€™è¯»å?lt;servlet>é…置节信æ¯ï¼Œæ ÒŽ(gu¨©)®<servlet-class>é…置节信æ¯åˆ›å»ºServlet对象åQŒåŒæ—¶æ ¹æ?lt;init-param>é…置节信æ¯åˆ›å»ºHttpServletConfig对象åQŒç„¶åŽæ‰§è¡ŒServlet对象的initæ–ÒŽ(gu¨©)³•åQŒåÆˆä¸”æ ¹æ?lt;load-on-startup>é…ç½®èŠ‚ä¿¡æ¯æ¥å†›_®šåˆ›å¾Servlet对象的顺åºï¼Œå¦‚æžœæ¤é…¾|®èŠ‚ä¿¡æ¯ä¸ø™´Ÿæ•°æˆ–者没有酾|®ï¼Œé‚£ä¹ˆåœ¨Servlet容器å¯åЍæ—Óž¼Œž®†ä¸åŠ è²æ¤Servlet对象。当客户讉K—®Servlet容器æ—Óž¼ŒServlet容器æ ÒŽ(gu¨©)®å®¢æˆ·è®‰K—®çš„URL地å€åQŒé€šè¿‡<servlet-mapping>é…置节ä¸çš?lt;url-pattern>é…ç½®èŠ‚ä¿¡æ¯æ‰¾åˆ°æŒ‡å®šçš„Servlet对象åQŒåƈ调用æ¤Servlet对象的serviceæ–ÒŽ(gu¨©)³•ã€?/p>
ä¸ÞZº†éªŒè¯ä¸‹ï¼Œæˆ‘æ–°å»ÞZº†ä¸€ä¸ªweb app工程åQŒæ–°å»ÞZ¸€ä¸ªServletåQŒå¦‚ä¸?
当servletè¢«é”€æ¯æ—¶ä¼šåœ¨æŽ§åˆ¶åîC¸Šæ‰“å°æç¤ºè¯å¥åQŒä¸˜q‡æˆ‘å‘现在tomcatä¸ï¼Œåªè¦ä¸åœæ¢web容器åQŒservlet是ä¸ä¼šè¢«é”€æ¯çš„。有没有什么方法,当serviceæ–ÒŽ(gu¨©)³•执行完毕ž®±é”€æ¯è¿™ä¸ªservlet呢,我问了下è€å¸ˆåQŒä»–说写一个监å¬å™¨åQŒä¸˜q‡æˆ‘ä¸çŸ¥é“怎么åŽÕd®žçŽ°å®ƒåQŒå¦‚果有朋å‹çŸ¥é“实现的过½E‹ï¼Œ˜q˜è¯·èµæ•™ã€?/p>
/opt/taobao/java/bin/java -Dprogram.name=run.sh –server
-Xms4g //指定 jvm 的最ž®?/span> heap å¤§å° åQ?Xms默认是物ç†å†…å˜çš„1/4)
-Xmx4g //指定 jvm 的最å¤?/span> heap 大å°
-Xmn2g
-Xss1m
-XX:PermSize=96m
-XX:MaxPermSize=256m
-XX:SurvivorRatio=10
-XX:+HeapDumpOnOutOfMemoryError //
-XX:HeapDumpPath=/home/admin/logs/java.hprof -verbose:gc -Xloggc:/home/admin/logs/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection
-XX:CMSInitiatingOccupancyFraction=80
-XX:+UseCompressedOops
-XX:+DisableExplicitGC
-Djava.awt.headless=true
-Dsun.net.client.defaultConnectTimeout=10000
-Dsun.net.client.defaultReadTimeout=30000
-Djava.net.preferIPv4Stack=true
-Djava.endorsed.dirs=/opt/taobao/jboss/lib/endorsed
-classpath /opt/taobao/jboss/bin/run.jar:/opt/taobao/java/lib/tools.jar org.jboss.Main -b 0.0.0.0 -Djboss.server.home.dir=/home/admin/purdecision/.default -Djboss.server.home.url=file:/home/admin/purdecision/.default
˜q™äºŒòq´æ¥˜q™ä¸€å †ä¸œè¥¿æˆ‘ä»Žæ¥æ²¡æœ‰æ€€ç–‘过åQ?#8220;¾l对æ£ç¡®å®Œç¾Ž”åQŒæ®è¯´æ˜¯Xå®çš„æ ‡é…ã€‚ä»¥è‡³äºŽä»Žæ¥æ²¡æœ‰åŽÕdˆ†æžäº†è§£è¿‡åQˆä¸€çŸ¥åŠè§£ï¼‰åQŒå¯èƒ½çœŸçš„æ˜¯æƒ°æ€§ä‹Éç„Óž¼Œä¹Ÿå¯èƒ?#8220;å¿?#8221;å§ã€‚æ— æ„ä¸çœ‹åˆ°æœ‰äh在åšå®¢é‡Œå†™åˆ° “温故知新”åQŒå°±åƒæœ‰äºø™¯´è¯?/span>think in java一æ äh¯ä¸€å›žéƒ½æœ‰æ–°çš„å‘现。下é¢å°±åˆ†æžä¸€ä¸‹äؓ什么è¦è®„¡½®˜q™äº›å‚æ•°åQŒæœ‰ä½•æ„义ã€?/span>
上é¢å‚数说明åQ?/span>
-Xmx4g :
指定 jvm 的最å¤?/span> heap 大å°åQŒé»˜è®¤å€égؓ物ç†å†…å˜çš?/span>1/4åQŒæœ€ä½Œ™®¾å€¼åº”该视物ç†å†…å˜å¤§å°åŠè®¡½Ž—机内其他内å˜å¼€é”€è€Œå®š
-Xms4g :
指定 jvm 的最ž®?/span> heap 大å°ã€‚äº›å€ÆD®¾¾|®ä¸Ž-Xmx相åŒåQŒä»¥é¿å…æ¯æ¬¡åžƒåœ¾å›žæ”¶å®Œæˆå?/span>JVM釿–°åˆ†é…内å˜
-Xmn2g :
讄¡½®òq´è½»ä»£å¤§ž®äØ“2Gã€‚æ•´ä¸ªå †å¤§å°=òq´è½»ä»£å¤§ž®?/span> + òq´è€ä»£å¤§å° + æŒä¹…代大ž®ã€‚æŒä¹…代一èˆ?/span>
固定大å°ä¸?/span>64måQŒæ‰€ä»¥å¢žå¤§å¹´è½ÖM»£åŽï¼Œž®†ä¼šå‡å°òq´è€ä»£å¤§å°ã€?span style="color:red">æ¤å€¼å¯¹¾pÈ»Ÿæ€§èƒ½å½±å“较大åQ?/span>Sun官方æŽ?/span>
èé…¾|®äØ“æ•´ä¸ªå †çš„3/8ã€?/span>(按æ¤è¯´åº”讄¡½®ä¸?/span>1.5G)
-Xss1m
æ¯ä¸ª¾U¿ç¨‹å †æ ˆå¤§å°ä¸?/span>1M. æ ÒŽ(gu¨©)®åº”用的线½E‹æ‰€éœ€å†…å˜å¤§å°˜q›è¡Œè°ƒæ•´ã€‚在相åŒç‰©ç†å†…å˜ä¸?/span>,å‡å°˜q™ä¸ªå€ÆDƒ½ç”Ÿæˆæ›´å¤šçš„线½E‹ã€‚(本机ç”׃ºŽforest的原å›?/span>-Xss2måQŒåŽŸå›?/span>1åQšç‰©ç†å†…å˜è¿‡ž®?/span> 2åQ?/span>window¾U¿ç¨‹ä¸èƒ½å¤ªå¤š 猜的åQ?/span>
-XX:PermSize=96m
ç”¨äºŽå˜æ”¾é™æ€æ–‡ä»Óž¼Œå¦‚今Java¾c…R€æ–¹æ³•ç‰ã€‚æŒä¹…代对垃圑֛žæ”¶æ²¡æœ‰æ˜¾è‘—媄å“,但是有些应用å¯èƒ½åЍæ€ç”Ÿæˆæˆ–
者调用一äº?/span>classåQŒä¾‹å¦?/span>Hibernate½{‰ï¼Œåœ¨è¿™¿U时候需è¦è®¾¾|®ä¸€ä¸ªæ¯”较大的æŒä¹…代½Iºé—´æ¥å˜æ”¾è¿™äº›è¿è¡Œè¿‡½E‹ä¸æ–?/span>
增的¾c…R€‚æŒä¹…代大å°é€šè¿‡-XX:MaxPermSize=<N>˜q›è¡Œè®„¡½®
-XX:PermSize=64MB 最ž®å°ºå¯¸ï¼Œåˆå§‹åˆ†é…
-XX:MaxPermSize=256MB 最大å…许分é…尺寸,按需分é…
˜q‡å°ä¼šå¯¼è‡ß_¼šjava.lang.OutOfMemoryError: PermGen space
MaxPermSize¾~ºçœå€¼å’Œ-server -client选项相关ã€?/span>
-server选项下默�/span>MaxPermSize�/span>64m
-client选项下默�/span>MaxPermSize�/span>32m
åQˆäØ“ä»€ä¹ˆä¸æ˜?/span>64M å¯èƒ½æ˜?/span>webx讄¡½®çš„æŒä¹…ä»£½Iºé—´æ¯”较多)
-XX:SurvivorRatio=10
åQ?/span>SurvivorRatio=4讄¡½®òq´è½»ä»£ä¸EdenåŒÞZ¸ŽSurvivoråŒºçš„å¤§å°æ¯”倹{€‚设¾|®äØ“4åQŒåˆ™ä¸¤ä¸ªSurvivor
åŒÞZ¸Žä¸€ä¸?/span>Eden区的比å€égØ“2:4åQŒä¸€ä¸?/span>SurvivoråŒºå æ•´ä¸ªòq´è½»ä»£çš„1/6åQ?/span>
˜q™é‡Œè®„¡½®ä¸?/span>10也就是说一ä¸?/span>SurvivoråŒºå æ•´ä¸ªòq´è½»ä»£çš„1/12åQŒè¿™ä¸ªå‚数是å¦èƒ½ž®ä¸€ç‚¹ï¼Œæ¯•ç«Ÿæˆ‘ä»¬çš„åº”ç”¨ä¸æ²¡æœ‰åˆ›å¾å¾ˆå¤§çš„对åƒã€?/span>
˜q™ä¸ªå€ÆD®¾äº†æœ‰ä»€ä¹ˆç”¨åQ?/span>
上é¢é…ç½®ä¸?/span>-Xmn2g òq´è½»ä»£å¤§ž®ï¼ŒSurvivorRatioä¸?/span>10æ—?/span> åQ?/span>Eden‘…过1.66G时触å?/span>minor gc(young generation)
我的应用gc 日志一直在young gc ž®±æ˜¯å¦‚æ¤åQŒçœ‹æ¥æˆ‘的应ç”?/span> edenåŒø™¿˜æ˜¯è®¾çš„很大的ã€?/span>
-XX:+HeapDumpOnOutOfMemoryError
傿•°è¡¨ç¤ºå½?/span>JVMå‘生OOMæ—Óž¼Œè‡ªåŠ¨ç”ŸæˆDUMPæ–‡äšgã€?/span>
-XX:HeapDumpPath=${目录}傿•°è¡¨ç¤ºç”ŸæˆDUMPæ–‡äšgçš„èµ\径,也å¯ä»¥æŒ‡å®šæ–‡ä»¶å¿UŽÍ¼Œä¾‹å¦‚åQ?/span>-XX:HeapDumpPath=${目录}/java_heapdump.hprofã€‚å¦‚æžœä¸æŒ‡å®šæ–‡äšgå,默认为:java_<pid>_<date>_<time>_heapDump.hprofã€?/span>
-XX:+PrintGCDetailsåQ?/span>
输出形å¼åQ?/span>[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured:
112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps -XX:+PrintGCåQ?/span>PrintGCTimeStampså¯ä¸Žä¸Šé¢ä¸¤ä¸ªæ··åˆä½¿ç”¨
输出形å¼åQ?/span>11.851: [GC 98328K->93620K(130112K), 0.0082960 secs]
-XX:+UseConcMarkSweepGC
讄¡½®òq¶å‘攉™›†å™?/span>
å¯ä»¥ä¿è¯å¤§éƒ¨åˆ†å·¥ä½œéƒ½òq¶å‘˜q›è¡ŒåQˆåº”用ä¸åœæ¢åQ‰ï¼Œåžƒåœ¾å›žæ”¶åªæš‚åœå¾ˆž®‘的旉™—´åQŒæ¤æ”‰™›†å™¨é€‚åˆå¯¹å“åº”æ—¶é—´è¦æ±?/span>
比较高的ä¸ã€å¤§è§„模应用。ä‹Éç”?/span>-XX:+UseConcMarkSweepGC打开ã€?/span>
òq¶å‘攉™›†å™¨ä¸»è¦å‡ž®‘å¹´è€ä»£çš„æš‚åœæ—¶é—ß_¼Œä»–在应用ä¸åœæ¢çš„æƒ…况下ä‹É用独立的垃圾回收¾U¿ç¨‹åQŒè·Ÿítªå¯è¾‘Ö¯¹
象。在æ¯ä¸ªòq´è€ä»£åžƒåœ¾å›žæ”¶å‘¨æœŸä¸ï¼Œåœ¨æ”¶é›†åˆæœŸåÆˆå‘æ”¶é›†å™¨ 会对整个应用˜q›è¡Œ½Ž€çŸçš„æš‚åœåQŒåœ¨æ”‰™›†ä¸è¿˜ä¼šå†æš?/span>
åœä¸€‹Æ¡ã€‚第二次暂åœä¼šæ¯”½W¬ä¸€‹Æ¡ç¨é•¿ï¼Œåœ¨æ¤˜q‡ç¨‹ä¸å¤šä¸ªçº¿½E‹åŒæ—¶è¿›è¡Œåžƒåœ‘Ö›žæ”¶å·¥ä½œã€?/span>
CMS采用的基¼‹€½Ž—æ³•æ˜¯ï¼šæ ‡è®°—清除 所æœ?/span>CMSä¸ä¼šæ•´ç†ã€åŽ‹¾~©å †½Iºé—´ã€‚è¿™æ ·å°±ä¼šæœ‰ä¸€ä¸ªé—®é¢˜ï¼š¾l过CMS攉™›†çš„å †ä¼šäñ”生空间碎ç‰?/span>
-XX:CMSInitiatingOccupancyFraction=80
å¯åЍòq¶å‘攉™›†å™¨ï¼šå› 䨓òq¶å‘攉™›†åœ¨åº”用è¿è¡Œæ—¶˜q›è¡Œæ”‰™›†åQŒæ‰€ä»¥å¿…™åÖM¿è¯æ”¶é›†å®Œæˆä¹‹å‰æœ‰‘›_¤Ÿçš„内å˜ç©ºé—´ä¾›½E?/span>
åºä‹É用,å¦åˆ™ä¼šå‡ºçŽ?#8220;Concurrent Mode Failure”。通过讄¡½®-XX:CMSInitiatingOccupancyFraction=<N>
指定˜q˜æœ‰å¤šå°‘å‰©ä½™å †æ—¶å¼€å§‹æ‰§è¡ŒåÆˆå‘æ”¶é›?/span>
-XX:+UseCMSCompactAtFullCollectionåQ?/span>
打开对年è€ä»£çš„压¾~©ã€‚å¯èƒ½ä¼šå½±å“性能åQŒä½†æ˜¯å¯ä»¥æ¶ˆé™¤ç¢Žç‰?/span>
XX:+UseCompressedOops
通常64ä½?/span>JVM消耗的内å˜ä¼šæ¯”32ä½çš„å¤?/span>1.5å€ï¼Œ˜q™æ˜¯å› äØ“å¯¹è±¡æŒ‡é’ˆåœ?/span>64使ž¶æž„下åQŒé•¿åº¦ä¼š¾˜Õd€ï¼ˆæ›´å®½çš„寻å€åQ‰ã€?/span>
对于那些ž®†è¦ä»?/span>32ä½åã^å°ç§»æ¤åˆ°64ä½çš„应用æ¥è¯´åQŒåã^ç™½æ— è¾œå¤šäº?/span>1/2的内å˜å 用,˜q™æ˜¯å¼€å‘è€…ä¸æ„¿æ„看到的ã€?/span>
òq¸è¿çš„æ˜¯åQŒä»ŽJDK 1.6 update14开始,64 bit JVMæ£å¼æ”¯æŒäº?/span> -XX:+UseCompressedOops ˜q™ä¸ªå¯ä»¥åŽ‹ç¾ƒæŒ‡é’ˆåQŒè“v到节¾U¦å†…å˜å ç”¨çš„æ–°å‚æ•?/span>
-XX:-DisableExplicitGC
ž®†ä¼šå¿½ç•¥æ‰‹åŠ¨è°ƒç”¨GC的代ç ,如:System.gc()åQŒå°†-DisableExplicitGCåQ?/span> æ”ÒŽ(gu¨©)ˆ+DisableExplicitGCå³äØ“å¯ç”¨åQŒé»˜è®¤äØ“å¯ç”¨åQŒä»€ä¹ˆä¹Ÿä¸å†™åQŒé»˜è®¤æ˜¯åŠ å·åQŒä½†æ˜¯ç³»¾lŸå†…部默认的òq¶ä¸æ˜¯ä»€ä¹ˆéƒ½å¯ç”¨
è‡Ïx¤ä¸ÞZ»€ä¹?/span>Xmxä¸?/span>xms ä¸€æ øP¼Œä¸ÞZ»€ä¹ˆç”¨CMSåQˆåÆˆå‘æ”¶é›†å™¨åQ‰ï¼Œä¸ÞZ»€ä¹ˆç”¨äº?/span>cms è¦ä‹Éç”?/span>-XX:+UseCMSCompactAtFullCollectionåQŒäؓ什么用XX:+UseCompressedOops½{‰ç‰åQŒç›¸ä¿¡å¤§å®¶å’Œæˆ‘一æ ähœ‰æ‰€äº†è§£ã€‚丘q‡å¯¹äºŽæœ‰äº›è¿˜æ˜¯ä¸æ¸…楚ç†è§£æœ‰è¯¯åQŒå¯èƒ½è¿˜è¦æ¥æ¥å›žå›žæ£è…¾ï¼Œä¸èƒö之处请大家补充ã€?/span>