﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-大狮子慢慢爬的Blog-随笔分类-Java性能</title><link>http://www.blogjava.net/patrick/category/6249.html</link><description>Patrick's Blog</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 19:00:56 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 19:00:56 GMT</pubDate><ttl>60</ttl><item><title>Weblogic服务器性能调优</title><link>http://www.blogjava.net/patrick/archive/2005/12/30/26056.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Fri, 30 Dec 2005 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/patrick/archive/2005/12/30/26056.html</guid><wfw:comment>http://www.blogjava.net/patrick/comments/26056.html</wfw:comment><comments>http://www.blogjava.net/patrick/archive/2005/12/30/26056.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/patrick/comments/commentRss/26056.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/patrick/services/trackbacks/26056.html</trackback:ping><description><![CDATA[<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123696092><SPAN lang=EN-US><FONT face=Arial>Weblogic</FONT></SPAN></A>服务器性能调优</H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">注：在下面做的介绍都是以</SPAN><SPAN lang=EN-US><FONT face=Arial>Weblogic8.1</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">为例的，其它版本的</SPAN><SPAN lang=EN-US><FONT face=Arial>Weblogic</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可能会有些许不同。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>JAVA</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">参数；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>a) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编辑</SPAN><SPAN lang=EN-US><FONT face=Arial>Weblogic Server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">启动脚本文件；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level2 lfo1; tab-stops: list 42.0pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><FONT face=Arial>BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh on Unix)</FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l1 level2 lfo1; tab-stops: list 42.0pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><FONT face=Arial>BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix)</FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>b) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编辑</SPAN><SPAN lang=EN-US><FONT face=Arial>set JAVA_OPTIONS</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">命令，如：</SPAN><SPAN lang=EN-US><FONT face=Arial>set JAVA_OPTIONS=-Xms<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:chmetcnv w:st="on" UnitName="m" SourceValue="256" HasSpace="False" Negative="False" NumberType="1" TCSC="0">256m</st1:chmetcnv> –Xmx<st1:chmetcnv w:st="on" UnitName="m" SourceValue="256" HasSpace="False" Negative="False" NumberType="1" TCSC="0">256m</st1:chmetcnv></FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>c) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">保存，重启即可。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">注：在</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>WebLogic</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">中，为了获得更好的性能，</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>BEA</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">公司推荐最小</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>Java</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆等于最大</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>Java</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆。</SPAN><SPAN lang=EN-US style="COLOR: blue"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>2) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">开发模式</SPAN><SPAN lang=EN-US><FONT face=Arial> vs. </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">产品模式；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">开发模式和产品模式的一些参数的默认值不同，可能会对性能造成影响，下面是对性能有影响的参数列表：</SPAN></P>
<TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 194.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=259>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">参数</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #e0dfe3; WIDTH: 134.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=179>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">开发模式默认值</SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #e0dfe3; WIDTH: 164.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=219>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">产品模式默认值</SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 1">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 194.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=259>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>Execute Queue: Thread Count</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #e0dfe3; WIDTH: 134.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=179>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>15 threads</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #e0dfe3; WIDTH: 164.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=219>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>25 threads</FONT></SPAN></P></TD></TR>
<TR style="mso-yfti-irow: 2; mso-yfti-lastrow: yes">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 194.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=259>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>JDBC Connection Pool: MaxCapacity</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #e0dfe3; WIDTH: 134.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=179>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>15 connnections</FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #e0dfe3; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #e0dfe3; WIDTH: 164.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=219>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial>25 connections</FONT></SPAN></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置</SPAN><FONT face=Arial> <SPAN lang=EN-US>&gt; </SPAN></FONT><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">常规选择产品模式。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽量开启本地</SPAN><SPAN lang=EN-US><FONT face=Arial>I/O</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">服务器</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">实例（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>myserver</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调整选择启用本地</SPAN><SPAN lang=EN-US><FONT face=Arial>I/O</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">注：此值也可通过手动的修改</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>config.xml</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置文件。</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>4) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调优执行队列线程；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>a) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">修改默认执行线程数</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在这里，执行队列的线程数表示执行队列能够同时执行的操作的数量。但此值不是设的越大越好，应该恰到好处的去设置它，太小了，执行队列中将会积累很多待处理的任务，太大了，则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为</SPAN><SPAN lang=EN-US><FONT face=Arial>25</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">个执行线程。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">为了设置理想的执行队列的线程数，我们可以启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">服务器</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">实例（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>myserver</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">监视</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数，据此确定理想的数值。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">理想的默认执行线程数是由多方面的因素决定的，比如机器</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">性能、总体体系架构、</SPAN><SPAN lang=EN-US><FONT face=Arial>I/O</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">、操作系统的进程调度机制、</SPAN><SPAN lang=EN-US><FONT face=Arial>JVM</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的线程调度机制。随着</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">个数的增加，</SPAN><SPAN lang=EN-US><FONT face=Arial>WebLogic</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可以近乎线性地提高线程数。线程数越多，花费在线程切换的时间也就越多；线程数越小，</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可能无法得到充分的利用。为获取一个理想的线程数，需要经过反复的测试。在测试中，可以以</SPAN><SPAN lang=EN-US><FONT face=Arial>25*CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">个数为基准进行调整。当空闲线程较少，</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">利用率较低时，可以适当增加线程数的大小（每五个递增）。对于</SPAN><SPAN lang=EN-US><FONT face=Arial>PC Server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>Windows 2000</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，则最好每个</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">小于</SPAN><SPAN lang=EN-US><FONT face=Arial>50</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">个线程，以</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">利用率为</SPAN><SPAN lang=EN-US><FONT face=Arial>90%</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">左右为最佳。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">服务器</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">实例（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>myserver</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; Execute Queue &gt; weblogic.kernel.Defalt &gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置中修改线程计数。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>b) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设定执行队列的溢出条件；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Weblogic Server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">提供给默认的执行队列或用户自定义的执行队列自定义溢出条件的功能，当满足此溢出条件时，服务器改变其状态为“警告”状态，并且额外的再分配一些线程去处理在队列中的请求，而达到降低队列长度的目的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">服务器</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">实例（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>myserver</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; Execute Queue &gt; weblogic.kernel.Defalt &gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置下面几项：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l3 level2 lfo3; tab-stops: list 42.0pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">队列长度：此值表示执行队列中可容纳的最大请求数，默认值是</SPAN><SPAN lang=EN-US><FONT face=Arial>65536</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，最后不要手动改变此值。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l3 level2 lfo3; tab-stops: list 42.0pt"><SPAN class=dialog-label><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">队列长度阈值百分比：此值表示溢出条件，</SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在此服务器指出队列溢出之前可以达到的队列长度大小的百分比。</SPAN></SPAN><SPAN class=dialog-label><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l3 level2 lfo3; tab-stops: list 42.0pt"><SPAN class=dialog-label><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">线程数增加：当检测到溢出条件时，将增加到执行队列中的线程数量。如果</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和内存不是足够的高，尽量不要改变默认值“</SPAN><SPAN lang=EN-US><FONT face=Arial>0</FONT></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">”。因为</SPAN><SPAN lang=EN-US><FONT face=Arial>Weblogic</FONT></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">一旦增加后不会自动缩减，虽然最终可能确实起到了降低请求的作用，但在将来的运行中将影响程序的性能。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l3 level2 lfo3; tab-stops: list 42.0pt"><SPAN class=dialog-label><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">最大线程数：为了防止创建过多的线程数量，可以通过设定最大的线程数进行控制。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在实际的应用场景中，应根据具体情况适当的调整以上参数。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>c) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设定执行队列监测行为</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=Arial>Weblogic Server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">能够自动监测到当一个执行线程变为“阻塞”。变为“阻塞”状态的执行线程将无法完成当前的工作，也无法再执行新请求。如果执行队列中的所有执行线程都变为“阻塞”状态，</SPAN><SPAN lang=EN-US><FONT face=Arial>Weblogic server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可能改变状态为“警告”或“严重”状态。如果</SPAN><SPAN lang=EN-US><FONT face=Arial>Weblogic server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">变为“严重”状态，可以通过</SPAN><SPAN lang=EN-US><FONT face=Arial>Node Manager</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">来自动关闭此服务器并重新启动它。具体请参考：</SPAN><SPAN lang=EN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana; mso-ansi-language: EN"><A href="http://e-docs.bea.com/wls/docs81/adminguide/nodemgr.html#NodeManagerCapabilities">Node Manager Capabilities</A></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 黑体; mso-ascii-font-family: Verdana; mso-ansi-language: EN; mso-hansi-font-family: Verdana">文档。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">服务器</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">实例（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>myserver</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调整下可配置下面几项：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo2; tab-stops: list 42.0pt"><SPAN class=dialog-help><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">阻塞线程最长时间：</SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在此服务器将线程诊断为阻塞线程之前，线程必须连续工作的时间长度</SPAN><SPAN lang=EN-US><FONT face=Arial>(</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">秒</SPAN><SPAN lang=EN-US><FONT face=Arial>)</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。默认情况下，</SPAN><SPAN lang=EN-US><FONT face=Arial>WebLogic Server </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">认为线程在连续工作</SPAN><SPAN lang=EN-US><FONT face=Arial> 600 </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">秒后成为阻塞线程。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo2; tab-stops: list 42.0pt"><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">阻塞线程计时器间隔：</SPAN></SPAN><SPAN class=dialog-help><SPAN lang=EN-US><FONT face=Arial>WebLogic Server </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">定期扫描线程以查看它们是否已经连续工作了</SPAN><SPAN lang=EN-US><FONT face=Arial> "</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">阻塞线程最长时间</SPAN><SPAN lang=EN-US><FONT face=Arial>" </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">字段中指定的时间长度的间隔时间</SPAN><SPAN lang=EN-US><FONT face=Arial>(</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">秒</SPAN><SPAN lang=EN-US><FONT face=Arial>)</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。默认情况下，</SPAN><SPAN lang=EN-US><FONT face=Arial>WebLogic Server </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">将此时间间隔设置为</SPAN><SPAN lang=EN-US><FONT face=Arial> 600 </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">秒。</SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>5) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调优</SPAN><SPAN lang=EN-US><FONT face=Arial>TCP</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">连接缓存数；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN lang=EN-US><FONT face=Arial>WebLogic Server</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">用</SPAN><SPAN lang=EN-US><FONT face=Arial>Accept Backlog</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">参数规定服务器向操作系统请求的队列大小，默认值为</SPAN><SPAN lang=EN-US><FONT face=Arial>50</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。当系统重载负荷时</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">这个值可能过小</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">日志中报</SPAN><SPAN lang=EN-US><FONT face=Arial>Connection Refused,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">导致有效连接请求遭到拒绝</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">此时可以提高</SPAN><SPAN lang=EN-US><FONT face=Arial>Accept Backlog 25%</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">直到连接拒绝错误消失。对于</SPAN><SPAN lang=EN-US><FONT face=Arial>Portal</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类型的应用</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">默认值往往是不够的。</SPAN><SPAN lang=EN-US><FONT face=Arial>Login Timeout</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>SSL Login Timeout</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">参数表示普通连接和</SPAN><SPAN lang=EN-US><FONT face=Arial>SSL</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">连接的超时时间</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">如果客户连接被服务器中断或者</SPAN><SPAN lang=EN-US><FONT face=Arial>SSL</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">容量大</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可以尝试增加该值。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">服务器</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">实例（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>myserver</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调整下可配置“接受预备连接”。</SPAN><SPAN class=dialog-help><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN class=dialog-help><SPAN lang=EN-US><FONT face=Arial>6) </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">改变</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编译器；</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">标准的</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编译器是</SPAN><SPAN lang=EN-US><FONT face=Arial>javac</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，但编译</SPAN><SPAN lang=EN-US><FONT face=Arial>JSP servlets</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">速度太慢，为了提高编译速度，可以使用</SPAN><SPAN lang=EN-US><FONT face=Arial>sj</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">或</SPAN><SPAN lang=EN-US><FONT face=Arial>jikes</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编译器取代</SPAN><SPAN lang=EN-US><FONT face=Arial>javac</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编译器。下面说说更改</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编译器：</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过启动管理控制台，在域（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>mydomain</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">服务器</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; server</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">实例（如：</SPAN><SPAN lang=EN-US><FONT face=Arial>myserver</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）</SPAN><SPAN lang=EN-US><FONT face=Arial>&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">配置</SPAN><SPAN lang=EN-US><FONT face=Arial> &gt; </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">常规下改变</SPAN><SPAN class=dialog-label><SPAN lang=EN-US><FONT face=Arial>Java </FONT></SPAN></SPAN><SPAN class=dialog-label><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编译器</SPAN><FONT face=Arial>，默认为</FONT></SPAN><SPAN lang=EN-US><FONT face=Arial>javac</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。输入完整路径，如：</SPAN><SPAN lang=EN-US><FONT face=Arial>c:\visualcafe31\bin\sj.exe</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。然后打开高级选项，在<SPAN class=dialog-label>预规划到类路径</SPAN>填写</SPAN><FONT face=Arial><SPAN class=dialog-help>编译</SPAN></SPAN><SPAN class=dialog-help><SPAN lang=EN-US> Java </SPAN></SPAN></FONT><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">代码时为</SPAN><SPAN lang=EN-US><FONT face=Arial> Java </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">编译器类路径预规划的选项，如：</SPAN></SPAN><A name=1104268></A><SPAN class=dialog-help><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana">BEA_HOME\jdk141_02\jre\lib\rt.jar</SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN lang=EN style="mso-ansi-language: EN"><FONT face=Arial>7) </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-ansi-language: EN">使用</SPAN></SPAN><SPAN class=dialog-help><SPAN lang=EN style="mso-ansi-language: EN"><FONT face=Arial>Webogic Server</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-ansi-language: EN">集群提高性能；</SPAN></SPAN><SPAN class=dialog-help><SPAN lang=EN style="mso-ansi-language: EN"><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">具体关于如何配置</SPAN><SPAN lang=EN-US><FONT face=Arial>Weblogic</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">集群，我就不细说了。详情可参考：</SPAN></SPAN><SPAN lang=EN style="mso-ansi-language: EN"><A href="http://e-docs.bea.com/wls/docs81/cluster/overview.html"><FONT face=Arial>Introduction to WebLogic Server Clustering</FONT></A></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-ansi-language: EN">。</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN style="mso-ansi-language: EN"><FONT face=Arial>8) Weblogic EJB</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-ansi-language: EN">调优</SPAN><SPAN lang=EN style="mso-ansi-language: EN"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">由于</SPAN><SPAN lang=EN-US><FONT face=Arial>EJB2.0</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">已经很少项目在用了，</SPAN><SPAN lang=EN-US><FONT face=Arial>EJB3.0</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">再成熟一点，我再补充这一部分吧！</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN lang=EN-US><FONT face=Arial>9) JDBC</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">应用调优</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN lang=EN-US><FONT face=Arial>JDBC Connection Pool</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的调优受制于</SPAN><SPAN lang=EN-US><FONT face=Arial>WebLogic Server</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">线程数的设置和数据库进程数</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">游标的大小。通常我们在一个线程中使用一个连接</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">所以连接数并不是越多越好</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">为避免两边的资源消耗，建议设置连接池的最大值等于或者略小于线程数。同时为了减少新建连接的开销</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">将最小值和最大值设为一致。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">增加</SPAN><SPAN lang=EN-US><FONT face=Arial>Statement Cache Size</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对于大量使用</SPAN><SPAN lang=EN-US><FONT face=Arial>PreparedStatement</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象的应用程序很有帮助</SPAN><SPAN lang=EN-US><FONT face=Arial>,WebLogic</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">能够为每一个连接缓存这些对象</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">此值默认为</SPAN><SPAN lang=EN-US><FONT face=Arial>10</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。在保证数据库游标大小足够的前提下</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可以根据需要提高</SPAN><SPAN lang=EN-US><FONT face=Arial>Statement Cache Size</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。比如当你设置连接数为</SPAN><SPAN lang=EN-US><FONT face=Arial>25,Cache Size</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">为</SPAN><SPAN lang=EN-US><FONT face=Arial>10</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">时</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">数据库可能需要打开</SPAN><SPAN lang=EN-US><FONT face=Arial>25*10=250</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">个游标。不幸的是</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">当遇到与</SPAN><SPAN lang=EN-US><FONT face=Arial>PreparedStatement Cache</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">有关的应用程序错误时</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">你需要将</SPAN><SPAN lang=EN-US><FONT face=Arial>Cache Size</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置为</SPAN><SPAN lang=EN-US><FONT face=Arial>0</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽管</SPAN><SPAN lang=EN-US><FONT face=Arial>JDBC Connection Pool</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">提供了很多高级参数</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在开发模式下比较有用</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">但大部分在生产环境下不需调整。这里建议最好不要设置测试表</SPAN><SPAN lang=EN-US><FONT face=Arial>, </FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">同时</SPAN><SPAN lang=EN-US><FONT face=Arial>Test Reserved Connections</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>Test Released Connections</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">也无需勾上。</SPAN><FONT face=Arial> </FONT></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">当然如果你的数据库不稳定</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">时断时续</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">你就可能需要上述的参数打开。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">最后提一下驱动程序类型的选择</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">以</SPAN><SPAN lang=EN-US><FONT face=Arial>Oracle</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">为例</SPAN><SPAN lang=EN-US><FONT face=Arial>,Oracle</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">提供</SPAN><SPAN lang=EN-US><FONT face=Arial>thin</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动和</SPAN><SPAN lang=EN-US><FONT face=Arial>oci</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">从性能上来讲</SPAN><SPAN lang=EN-US><FONT face=Arial>,oci</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动强于</SPAN><SPAN lang=EN-US><FONT face=Arial>thin</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">特别是大数据量的操作。但在简单的数据库操作中</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">性能相差不大</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">随着</SPAN><SPAN lang=EN-US><FONT face=Arial>thin</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动的不断改进</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">这一弱势将得到弥补。而</SPAN><SPAN lang=EN-US><FONT face=Arial>thin</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动的移植性明显强于</SPAN><SPAN lang=EN-US><FONT face=Arial>oci</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动。所以在通常情况下建议使用</SPAN><SPAN lang=EN-US><FONT face=Arial>thin</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动。而最新驱动器由于</SPAN><SPAN lang=EN-US><FONT face=Arial>WebLogic server/bin</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">目录下的类包可能不是最新的</SPAN><SPAN lang=EN-US><FONT face=Arial>,</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">请以</SPAN><SPAN lang=EN-US><FONT face=Arial>Oracle</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">网站为准</SPAN><SPAN lang=EN-US><FONT face=Arial>: </FONT><A href="http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html"><FONT face=Arial>http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html</FONT></A></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN class=dialog-help><SPAN lang=EN-US><FONT face=Arial>10) JSP</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调优</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo4; tab-stops: list 42.0pt"><SPAN class=dialog-help><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>jsp-param pageCheckSeconds=-1</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo4; tab-stops: list 42.0pt"><SPAN class=dialog-help><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>serlet-reload-check=-1</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">或</SPAN><SPAN lang=EN-US><FONT face=Arial>ServletReloadCheckSecs=-1</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo4; tab-stops: list 42.0pt"><SPAN class=dialog-help><SPAN lang=EN-US style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings"><SPAN style="mso-list: Ignore">l<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>jsp-param precompile=true</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，关闭</SPAN><SPAN lang=EN-US><FONT face=Arial>JSP</FONT></SPAN></SPAN><SPAN class=dialog-help><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">预编译选项。</SPAN><SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></P><img src ="http://www.blogjava.net/patrick/aggbug/26056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-30 14:44 <a href="http://www.blogjava.net/patrick/archive/2005/12/30/26056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操作系统调优</title><link>http://www.blogjava.net/patrick/archive/2005/12/28/25697.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Wed, 28 Dec 2005 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/patrick/archive/2005/12/28/25697.html</guid><wfw:comment>http://www.blogjava.net/patrick/comments/25697.html</wfw:comment><comments>http://www.blogjava.net/patrick/archive/2005/12/28/25697.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/patrick/comments/commentRss/25697.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/patrick/services/trackbacks/25697.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 四 操作系统调优&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不同的操作系统默认的调优参数也不同。一般说来，默认的设置对于Windows操作系统通常就够了，但Linux和Unix操作系统则需要做适当的调整。通常，保证操作系统打上最新的补丁也很重要。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1) Solaris TCP调优参数；...&nbsp;&nbsp;<a href='http://www.blogjava.net/patrick/archive/2005/12/28/25697.html'>阅读全文</a><img src ="http://www.blogjava.net/patrick/aggbug/25697.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-28 12:53 <a href="http://www.blogjava.net/patrick/archive/2005/12/28/25697.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用程序调优（续）</title><link>http://www.blogjava.net/patrick/archive/2005/12/26/25478.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Mon, 26 Dec 2005 10:28:00 GMT</pubDate><guid>http://www.blogjava.net/patrick/archive/2005/12/26/25478.html</guid><wfw:comment>http://www.blogjava.net/patrick/comments/25478.html</wfw:comment><comments>http://www.blogjava.net/patrick/archive/2005/12/26/25478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/patrick/comments/commentRss/25478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/patrick/services/trackbacks/25478.html</trackback:ping><description><![CDATA[<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123372421><SPAN lang=EN-US><FONT face=Arial>3.2 </FONT></SPAN></A><SPAN style="mso-bookmark: _Toc123372421"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">字符串的调优</SPAN></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">下面列出一些常见的关于字符串优化的策略，简单的我就不多作解释了。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用规则表达式处理字符串匹配代替复杂的字符串查找和复制操作；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>2) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用不拷贝字符串中字符的高效方法，例如</SPAN><SPAN lang=EN-US><FONT face=Arial>String.subString()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能不要使用需要拷贝字符串中字符的低效方法，例如</SPAN><SPAN lang=EN-US><FONT face=Arial>String.toUpperCase()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>String.toLowercase()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US><FONT face=Arial>4) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在编译期使用</SPAN><SPAN lang=EN-US><FONT face=Arial>String</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的“</SPAN><SPAN lang=EN-US><FONT face=Arial>+</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">”操作符来执行连接操作，在运行期使用</SPAN><SPAN lang=EN-US><FONT face=Arial>StringBuffer</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">执行连接操作；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">这里特别强调一下，因为我已经在网上看到好多文章都推荐使用</SPAN><SPAN lang=EN-US><FONT face=Arial>StringBuffer</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的</SPAN><SPAN lang=EN-US><FONT face=Arial>append()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法来做字符串的连接操作。其实在</SPAN><SPAN lang=EN-US><FONT face=Arial>JVM</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">能够在编译期就能确定结果的情形，使用</SPAN><SPAN lang=EN-US><FONT face=Arial>String</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的“</SPAN><SPAN lang=EN-US><FONT face=Arial>+</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">”操作符的性能要好很多。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123372422><SPAN lang=EN-US><FONT face=Arial>3.3 </FONT></SPAN></A><SPAN style="mso-bookmark: _Toc123372422"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">异常，类型转换和变量</SPAN></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">考虑在抛出异常的时候是否可以不即时生成堆栈信息而使用一个已有的异常实例；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">创建异常的开销很大。当创建一个异常时，需要收集一个栈跟踪（</SPAN><SPAN lang=EN-US><FONT face=Arial>Stack Trace</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">），这个栈跟踪用于描述异常是在何处创建的。构建这些栈跟踪时需要为运行时栈做一份快照，正是这一部分开销很大。运行时栈不是为有效的异常创建而设计的，而是设计用来让运行时尽可能快地运行。入栈，出栈，入栈，出栈。让这样的工作顺利完成，而没有任何不必要的延迟。但是，当需要创建一个</SPAN><SPAN lang=EN-US><FONT face=Arial>Exception</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">时，</SPAN><SPAN lang=EN-US><FONT face=Arial>JVM</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">不得不说：“先别动，我想就你现在的样子存一份快照，所以按时停止入栈和出栈操作，笑着等我拍完快照吧。”栈跟踪不只包含运行时栈中的一两个元素，而是包含这个栈中的每一个元素，从栈顶到栈底，还有行号和一切应有的东西。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">因此，创建异常这一部分开销很大。从技术上讲，栈跟踪快照是在本地方法</SPAN><SPAN lang=EN-US><FONT face=Arial>Throwable.fillInStackTrace()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">中发生的，这个方法不是从</SPAN><SPAN lang=EN-US><FONT face=Arial>Throwable contructor</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">那里调用的。但是这并并没有什么影响——如果你创建了一个</SPAN><SPAN lang=EN-US><FONT face=Arial>Exception</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，就得付出代价。好在捕获异常开销不大，因此可以用</SPAN><SPAN lang=EN-US><FONT face=Arial>try-catch</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">将核心内容包起来。你也可以在方法定义中定义</SPAN><SPAN lang=EN-US><FONT face=Arial>throws</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">子句，这样对性能不会造成什么损失。从技术上讲，你甚至可以随意地抛出异常，而不用花费很大的代价。招致性能损失的并不是</SPAN><SPAN lang=EN-US><FONT face=Arial>throw</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">操作——尽管在没有预先创建异常的情况下就抛出异常是有点不寻常。真正要花代价的是创建异常。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">幸运的是，好的编程习惯已教会我们，不应该不管三七二十一就抛出异常。异常是为异常的情况而设计的，使用时也应该牢记这一原则。但是，万一你不想遵从好的编程习惯，</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">语言就会让你知道，那样就可以让你的程序运行的更快，从而鼓励你去那样做。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">用</SPAN><SPAN lang=EN-US><FONT face=Arial>instanceof</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">替代在</SPAN><SPAN lang=EN-US><FONT face=Arial>try-catch</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">中做投机的强制类型转换方法；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能少的使用强制类型转换方法，尤其是使用类型特定的集合类时；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>4) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用</SPAN><SPAN lang=EN-US><FONT face=Arial>int</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">优先于其他所有的数据类型；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>5) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能使用基本数据类型做临时变量；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>6) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">考虑直接获取实例变量而不通过</SPAN><SPAN lang=EN-US><FONT face=Arial>get</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，</SPAN><SPAN lang=EN-US><FONT face=Arial>set</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法获取（注意：这不符合面向对象的封装原则，不推荐使用）。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123372423><SPAN lang=EN-US><FONT face=Arial>3.4 </FONT></SPAN></A><SPAN style="mso-bookmark: _Toc123372423"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">循环，选择和递归</SPAN></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在循环中消除不必要的代码，做尽可能少的事情；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2) Switch</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">语句中使用连续的</SPAN><SPAN lang=EN-US><FONT face=Arial>case</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">值；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">确定是否真的需要用到递归，最好转为用循环来实现。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123372424><SPAN lang=EN-US><FONT face=Arial>3.5 </FONT></SPAN></A><SPAN style="mso-bookmark: _Toc123372424"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">输入输出操作</SPAN></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在程序中尽量不要使用</SPAN><SPAN lang=EN-US><FONT face=Arial>System.out</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">这样的语句，而使用</SPAN><SPAN lang=EN-US><FONT face=Arial>log4j</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">这样的日志工具替换，以在程序正式上线的时候可以关闭所有不必要的日志操作提高性能；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">当程序中有大量的</SPAN><SPAN lang=EN-US><FONT face=Arial>I/O</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">操作时，考虑将日志写入不同的文件做到并行化操作以提高性能，并可以用一个后台线程执行</SPAN><SPAN lang=EN-US><FONT face=Arial>I/O</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">操作而不打断正常程序的执行；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">正确的使用序列化机制，没有必要序列化的成员变量需要标识为</SPAN><SPAN lang=EN-US><FONT face=Arial>transient</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>4) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用</SPAN><SPAN lang=EN-US><FONT face=Arial>NIO</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">技术。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123372425><SPAN lang=EN-US><FONT face=Arial>3.6 JDBC</FONT></SPAN></A><SPAN lang=EN-US><FONT face=Arial> </FONT></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用正确的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDBC</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动，尽可能地选择最新的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDBC</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">最新的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDBC</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动不仅优化了性能，而且提供了更多的性能更好的接口供开发人员使用。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用应用服务器自带的连接池，而不要使用自己的连接池或干脆不用连接池；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在使用完数据库资源后，需依次关闭</SPAN><SPAN lang=EN-US><FONT face=Arial>ResultSet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，</SPAN><SPAN lang=EN-US><FONT face=Arial>Statement</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>Connection</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>4) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">手动控制事务，使用</SPAN><SPAN lang=EN-US><FONT face=Arial>connection.setAutoCommit(false)</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">关闭自动提交，使用</SPAN><SPAN lang=EN-US><FONT face=Arial>executeBatch()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">进行批量更新；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>5) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">业务复杂或者大数据量操作时使用存储过程；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>6) ResultSet.next()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">极其消耗性能，建议使用</SPAN><SPAN lang=EN-US><FONT face=Arial>RowSet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">替代</SPAN><SPAN lang=EN-US><FONT face=Arial>ResultSet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>7) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">把所有的字符数据都保存为</SPAN><SPAN lang=EN-US><FONT face=Arial>Unicode</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">以</SPAN><SPAN lang=EN-US><FONT face=Arial>UniCode</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">形式处理所有数据，数据库驱动程序不必再执行转换过程；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>8) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能的优化</SPAN><SPAN lang=EN-US><FONT face=Arial>SQL</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">语句；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>9) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">少用</SPAN><SPAN lang=EN-US><FONT face=Arial>join</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，多用</SPAN><SPAN lang=EN-US><FONT face=Arial>index</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>10) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用</SPAN><SPAN lang=EN-US><FONT face=Arial>EXPLAIN</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">工具监控</SPAN><SPAN lang=EN-US><FONT face=Arial>SQL</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">语句的执行，以确定瓶颈所在；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>11)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">不要使用</SPAN><SPAN lang=EN-US><FONT face=Arial> SELECT * ..., </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用</SPAN><SPAN lang=EN-US><FONT face=Arial> SELECT Field1, Field1 ...</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>12)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过</SPAN><SPAN lang=EN-US><FONT face=Arial>index</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">获取字段，而不要使用名字去获取，例如</SPAN><SPAN lang=EN-US><FONT face=Arial>resultSet.getString(1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">而不是</SPAN><SPAN lang=EN-US><FONT face=Arial> resultSet.getString("field1")</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>13)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">缓存数据，避免重复查询；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>14)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">考虑使用内存数据库；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>15)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调整</SPAN><SPAN lang=EN-US><FONT face=Arial>fetch size</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">进行批量查询；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>16)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能的使</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">数据类型和数据库类型相匹配，转换数据在匹配不好的数据类型间效率太差；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>17)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">避免使用低效的</SPAN><SPAN lang=EN-US><FONT face=Arial>metadata</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调用，尤其是</SPAN><SPAN lang=EN-US><FONT face=Arial>getBestRowIdentifier( ), getColumns( ), getCrossReference( ), getExportedKeys( ), getImportedKeys( ), getPrimaryKeys( ), getTables( ), and getVersionColumns( )</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>18)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用</SPAN><SPAN lang=EN-US><FONT face=Arial>metadata</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">查询减少数据库网络通信量；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>19)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"></SPAN><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用最低的事务隔离级别；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>20)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用乐观锁机制；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>21)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">把应用服务器和数据库分散在不同的机器中，性能可能会更好。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123372426><SPAN lang=EN-US><FONT face=Arial>3.7 Servlet</FONT></SPAN></A><SPAN style="mso-bookmark: _Toc123372426"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>JSP</FONT></SPAN></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1) Session</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的使用；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">应用服务器保存很多会话时，容易造成内存不足，所以尽量减少</SPAN><SPAN lang=EN-US><FONT face=Arial>Session</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的使用，放置到</SPAN><SPAN lang=EN-US><FONT face=Arial>Session</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">中的对象不应该是大对象，最好是简单的小对象，实现串行化接口。当会话不再需要时，应当及时调用</SPAN><SPAN lang=EN-US><FONT face=Arial>invalidate()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法清除会话。而当某个变量不需要时，及时调用</SPAN><SPAN lang=EN-US><FONT face=Arial>removeAttribute()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法清除变量。当</SPAN><SPAN lang=EN-US><FONT face=Arial>session</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">终止时需要清除不必要的资源，实现</SPAN><SPAN lang=EN-US><FONT face=Arial>HttpSessionBindingListener</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">接口的</SPAN><SPAN lang=EN-US><FONT face=Arial>valueUnbound()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用</SPAN><SPAN lang=EN-US><FONT face=Arial>include directive</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，而不使用</SPAN><SPAN lang=EN-US><FONT face=Arial>include action</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">目前在</SPAN><SPAN lang=EN-US><FONT face=Arial>JSP</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">页面中引入外部资源的方法主要有两种：</SPAN><SPAN lang=EN-US><FONT face=Arial>include directive</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>include action</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。</SPAN><SPAN lang=EN-US><FONT face=Arial>Include directive</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">：例如</SPAN><SPAN lang=EN-US><FONT face=Arial>&lt;%@ include file=”copyright.html” %&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，该指令在编译时引入指定的资源。在编译之前，带有</SPAN><SPAN lang=EN-US><FONT face=Arial>include</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">指令的页面和指定的资源被合并成一个文件。被引用的资源在编译时就确定，比运行时才确定资源更高效。</SPAN><SPAN lang=EN-US><FONT face=Arial>Include action</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">：例如</SPAN><SPAN lang=EN-US><FONT face=Arial>&lt; jsp:include page=”copyright.jsp” /&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，该动作引入指定页面执行后生成的结果。由于它在运行时完成，因此对输出结果的控制更加灵活。但是，只有当引用的内容被频繁改变时，或者在对主页面的请求没有出现之前，被引用的页面无法确定时，使用</SPAN><SPAN lang=EN-US><FONT face=Arial>include action</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">才合算。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对于那些无需跟踪会话状态的</SPAN><SPAN lang=EN-US><FONT face=Arial>jsp</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，关闭自动创建的会话可以节省一些资源。使用如下</SPAN><SPAN lang=EN-US><FONT face=Arial>page</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">指令：</SPAN><SPAN lang=EN-US><FONT face=Arial> &lt; %@ page session=”false” %&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>4) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽量不要把</SPAN><SPAN lang=EN-US><FONT face=Arial>jsp</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">页面定义为单线程，应设置为</SPAN><SPAN lang=EN-US><FONT face=Arial>&lt; %@page isThreadSafe=”true” %&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>5) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在</SPAN><SPAN lang=EN-US><FONT face=Arial>jsp</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">页面最好使用输出缓存功能，如：</SPAN><SPAN lang=EN-US><FONT face=Arial>&lt; %@page buffer=”32kb” %&gt;</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>6) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在</SPAN><SPAN lang=EN-US><FONT face=Arial>servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">之间跳转时，</SPAN><SPAN lang=EN-US><FONT face=Arial>forward</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">比</SPAN><SPAN lang=EN-US><FONT face=Arial>sendRedirect</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">更有效；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>7) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>HttpServletResponse</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">缓冲区，如：</SPAN><SPAN lang=EN-US><FONT face=Arial>response.setBufferSize(20000)</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>8) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">建议在</SPAN><SPAN lang=EN-US><FONT face=Arial>servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">里使用</SPAN><SPAN lang=EN-US><FONT face=Arial>ServletOutputStream</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">输出图片等对象；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=Arial>9) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">不要使用</SPAN><SPAN lang=EN-US><FONT face=Arial>SingleThreadModel</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，使</SPAN><SPAN lang=EN-US><FONT face=Arial>Servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">是线程安全的，但是尽可能的减少消耗在同步代码上的时间，使用足够多的</SPAN><SPAN lang=EN-US><FONT face=Arial>servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">去响应用户的请求；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=Arial>10) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能的使</SPAN><SPAN lang=EN-US><FONT face=Arial>useBean</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的范围在</SPAN><SPAN lang=EN-US><FONT face=Arial>page</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">范围内；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>11)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>Servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的</SPAN><SPAN lang=EN-US><FONT face=Arial>inti()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>destroy()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">或</SPAN><SPAN lang=EN-US><FONT face=Arial>jspInit()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>jspDestroy()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法用于创建和删除昂贵的资源，例如缓存对象和数据库连接；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>12)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">避免使用反向</SPAN><SPAN lang=EN-US><FONT face=Arial>DNS</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">查找；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>13)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">预编译</SPAN><SPAN lang=EN-US><FONT face=Arial>JSP</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">页面；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>14)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能的在客户段校验数据；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>15)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial>&nbsp;</FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">禁止自动装载特色防止周期性的装载</SPAN><SPAN lang=EN-US><FONT face=Arial>servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>jsp</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123372427><SPAN lang=EN-US><FONT face=Arial>3.8 EJB</FONT></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">由于</SPAN><SPAN lang=EN-US><FONT face=Arial>EJB2.0</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">已经很少项目在用了，</SPAN><SPAN lang=EN-US><FONT face=Arial>EJB3.0</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">再成熟一点，我再补充这一部分吧！</SPAN></P><img src ="http://www.blogjava.net/patrick/aggbug/25478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-26 18:28 <a href="http://www.blogjava.net/patrick/archive/2005/12/26/25478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用程序调优——对象创建</title><link>http://www.blogjava.net/patrick/archive/2005/12/25/25348.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Sun, 25 Dec 2005 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/patrick/archive/2005/12/25/25348.html</guid><wfw:comment>http://www.blogjava.net/patrick/comments/25348.html</wfw:comment><comments>http://www.blogjava.net/patrick/archive/2005/12/25/25348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/patrick/comments/commentRss/25348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/patrick/services/trackbacks/25348.html</trackback:ping><description><![CDATA[<H2 style="MARGIN: 13pt 0cm"><SPAN lang=EN-US><FONT face=Arial>3.1 </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象创建</SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象的创建是一个非常昂贵的工作，而由于对象的创建而导致经常性的垃圾收集则是一个更加消耗时间和</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的操作。我们在编码时，应当尽量的减少对象的创建。不要在经常被执行的代码中创建对象；使用集合对象时最好预先分配其大小；当一个</SPAN><SPAN lang=EN-US><FONT face=Arial>class</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的多个实例都需要获取某个对象时，最好能标记那个对象</SPAN><SPAN lang=EN-US><FONT face=Arial>static</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；当不需要</SPAN><SPAN lang=EN-US><FONT face=Arial>stack trace</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">时尽可能的重用异常实例等等都能很有效的避免对象创建而导致的额外的开销。下面是一些常用的有效的策略：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>1)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象池技术</SPAN><SPAN lang=EN-US style="COLOR: blue"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">中开发一个普遍性的对象池架构可以更好地利用资源，并可以使对象创建的成本降到最小。大多数人对直接或间接运用对象池来连接一个数据库都很熟悉。但通常你也可以将对象放入对象池中从而节省重要的资源、提高程序的效率并控制对不充足资源的访问。出于对设计、成本或性能的考虑，放入对象池中的对象通常是有限的。它们或者是初始化成本很高的对象，或者是很少用的对象。运用对象池我们可以管理竞争性客户端对有限的对象集的访问。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象池主要是可以更好地运用你的资源。例如，设想有相当多的客户要有效运用很少的数据库连接或网络连接。通过限制对对象的访问（只在客户端需要的时候才能访问对象），你就可以释放资源，让其它客户端使用。通过对象池提高对象的利用率通常可以提高系统的性能。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">你可以使用对象池使初始化的成本达到最小。典型的例子包括数据库、网络连接和线程。这样的连接通常需要很多时间来初始化。一旦创建了这些连接，你就可以重用它们，从而极大地节省了成本。因此，你可以将初始化成本很高（从时间、内存或其它资源方面考虑）的对象放入对象池中。例如，大多数容器都将</SPAN><SPAN lang=EN-US><FONT face=Arial>EJB</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">放入对象池中，从而避免重复的资源分配和状态初始化。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">一个设计良好的对象池架构具有普遍性，它适合不同应用程序的需要。可以让你控制对象池的容量、对象填充策略和对象状态。它可以极大地提高你的应用程序的效率，不管从速度方面考虑，还是从资源利用率方面考虑，该架构都可以提供这样的好处。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在这里，给大家推荐一个开源的项目</SPAN><SPAN lang=EN-US><FONT face=Arial>Commons-Pool</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">（</SPAN><SPAN lang=EN-US><A href="http://jakarta.apache.org/commons/pool/"><FONT face=Arial>http://jakarta.apache.org/commons/pool/</FONT></A></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">），我还没来得及研究，谁用过了，感觉好的，麻烦告诉我一下，谢谢！</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>2)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>ThreadLocal</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">技术</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用此技术获取线程绑定的带状态的单例对象。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>3)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">单例模式</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过单例模式或使定义对象</SPAN><SPAN lang=EN-US><FONT face=Arial>static</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">来使得对象的实例只能有一个并被其他对象所共享。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>4)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">枚举常量</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用整数取代字符串作为枚举常量，比如</SPAN><SPAN lang=EN-US><FONT face=Arial>FEMALE</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>MALE</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">我们可以用整数</SPAN><SPAN lang=EN-US><FONT face=Arial>1</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>2</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">来替代。这样将带来速度上和内存上的优势。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>5)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>SoftReference</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>WeakReference</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US style="COLOR: blue"><FONT face=Arial>PhantomReference</FONT></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用类</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用类的主要功能就是能够引用仍可以被垃圾收集器回收的对象。在引入引用类之前，我们只能使用强引用（</SPAN><SPAN lang=EN-US><FONT face=Arial>Strong Reference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）。例如</SPAN><SPAN lang=EN-US><FONT face=Arial>obj</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">这个引用将引用堆中存储的一个对象，只要</SPAN><SPAN lang=EN-US><FONT face=Arial>obj</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用还存在，垃圾收集器就永远不会释放用来容纳该对象的存储空间。当</SPAN><SPAN lang=EN-US><FONT face=Arial>obj</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">超出范围或被显式指定为</SPAN><SPAN lang=EN-US><FONT face=Arial>null</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">时，垃圾收集器就认为没有对这个对象的其他引用，也就可以收集它了。然而还需要注意一个重要的细节：仅凭对象可以被收集并不意味着垃圾收集器的一次指定运行就能够回收它。由于各种垃圾收集算法不同，某些算法会更频繁地分析生存期较短的对象，而不是较老、生存期较长的对象。因此，一个可供收集的对象可能永远也不会被回收。如果程序在垃圾收集器释放对象之前结束，这种情况就可能会出现。因此，概括地说，你永远无法保证可供收集的对象总是会被垃圾收集器收集。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">让我们来看看一些术语和定义：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">强可及对象（</SPAN><SPAN lang=EN-US><FONT face=Arial>Strongly Reachable</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）：可以通过强引用访问的对象。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">软可及对象（</SPAN><SPAN lang=EN-US><FONT face=Arial>Softly Reachable</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）：不是强可及对象，并且能够通过软引用访问的对象。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">弱可及对象（</SPAN><SPAN lang=EN-US><FONT face=Arial>Weakly Reachable</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）：不是强可及对象也不是软可及对象，并且能够通过弱引用访问的对象。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">虚可及对象（</SPAN><SPAN lang=EN-US><FONT face=Arial>Phantomly Reachable</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）：不是强可及对象、软可及对象，也不是弱可及对象，已经结束的，可以通过虚引用访问的对象。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">清除：将引用对象的</SPAN><SPAN lang=EN-US><FONT face=Arial>refernce</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">域设置为</SPAN><SPAN lang=EN-US><FONT face=Arial>null</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，并将引用类在堆中引用的对象声明为可结束的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=Arial>SoftReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类：</SPAN><SPAN lang=EN-US><FONT face=Arial>SoftReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类的一个典型用途就是用于内存敏感的高速缓存。</SPAN><SPAN lang=EN-US><FONT face=Arial>SoftReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的原理是：在保持对对象的引用时保证在</SPAN><SPAN lang=EN-US><FONT face=Arial>JVM</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">报告内存不足情况之前清楚所有的软引用。关键之处在于，垃圾收集器在运行时可能会（也可能不会）释放软可及对象。对象是否被是否取决于垃圾收集器的算法以及垃圾收集器运行时可用的内存数量。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=Arial>WeakReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类：</SPAN><SPAN lang=EN-US><FONT face=Arial>WeakReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类的一个典型用途就是规范化映射（</SPAN><SPAN lang=EN-US><FONT face=Arial>Canonicalized Mapping</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）。另外，对于那些生存期相对较长而且重新创建的开销也不高的对象来说，弱引用也比较有用。关键之处在于，垃圾收集器运行时如果碰到了弱可及对象，将释放</SPAN><SPAN lang=EN-US><FONT face=Arial> WeakReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用的对象。然而，请注意，垃圾收集器可能要运行多次才能找到并释放弱可及对象。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 14.25pt"><SPAN lang=EN-US><FONT face=Arial>PhantomReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类：</SPAN><SPAN lang=EN-US><FONT face=Arial>PhantomReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类只能用于跟踪对被引用对象即将进行的收集。同样，它还能用于执行</SPAN><SPAN lang=EN-US><FONT face=Arial> pre-mortem </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">清除操作。</SPAN><SPAN lang=EN-US><FONT face=Arial> PhantomReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">必须与</SPAN><SPAN lang=EN-US><FONT face=Arial> ReferenceQueue </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">类一起使用。需要</SPAN><SPAN lang=EN-US><FONT face=Arial> ReferenceQueue </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">是因为它能够充当通知机制。当垃圾收集器确定了某个对象是虚可及对象时，</SPAN><SPAN lang=EN-US><FONT face=Arial> PhantomReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象就被放在它的</SPAN><SPAN lang=EN-US><FONT face=Arial> ReferenceQueue </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">上。将</SPAN><SPAN lang=EN-US><FONT face=Arial> PhantomReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象放在</SPAN><SPAN lang=EN-US><FONT face=Arial> ReferenceQueue </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">上也就是一个通知，表明</SPAN><SPAN lang=EN-US><FONT face=Arial> PhantomReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象引用的对象已经结束，可供收集了。这使您能够刚好在对象占用的内存被回收之前采取行动。</SPAN><SPAN lang=EN-US><FONT face=Arial> </FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在某些场合引用类还是很有用的，具体可以参考文章</SPAN><SPAN lang=EN-US><FONT face=Arial>Java2</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用类使用指南（</SPAN><SPAN lang=EN-US><A href="http://www-128.ibm.com/developerworks/cn/java/j-refs/index.html"><FONT face=Arial>http://www-128.ibm.com/developerworks/cn/java/j-refs/index.html</FONT></A></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">）。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>6)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能少的减少不必要对象的生成</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">尽可能减少在循环中创建对象，使用</SPAN><SPAN lang=EN-US><FONT face=Arial>StringBuffer</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">而不要使用</SPAN><SPAN lang=EN-US><FONT face=Arial>String</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">来做连接操作等等。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>7)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">改变对象的创建时机</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">通过提前创建对象或延迟到使用时再创建对象，来做到性能优化和避免创建过多的对象。</SPAN></P><img src ="http://www.blogjava.net/patrick/aggbug/25348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-25 09:40 <a href="http://www.blogjava.net/patrick/archive/2005/12/25/25348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>性能调优的基本知识和JDK调优</title><link>http://www.blogjava.net/patrick/archive/2005/12/22/25117.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Thu, 22 Dec 2005 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/patrick/archive/2005/12/22/25117.html</guid><wfw:comment>http://www.blogjava.net/patrick/comments/25117.html</wfw:comment><comments>http://www.blogjava.net/patrick/archive/2005/12/22/25117.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.blogjava.net/patrick/comments/commentRss/25117.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/patrick/services/trackbacks/25117.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20.9pt; mso-char-indent-count: 1.99">&nbsp;</P>
<H1 style="MARGIN: 17pt 0cm 16.5pt"><A name=_Toc123026767><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-size: 22.0pt">一</SPAN></A><SPAN style="mso-bookmark: _Toc123026767"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; mso-bidi-font-size: 22.0pt"><FONT face=Arial> </FONT></SPAN></SPAN><SPAN style="mso-bookmark: _Toc123026767"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-size: 22.0pt">基本知识</SPAN></SPAN><SPAN style="mso-bookmark: _Toc123026767"></SPAN><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; mso-bidi-font-size: 22.0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></H1>
<H2 style="MARGIN: 13pt 0cm"><A name=_Toc123026768><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 173%"><FONT face=Arial>1.1 </FONT></SPAN></A><SPAN style="mso-bookmark: _Toc123026768"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 173%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">性能是什么</SPAN></SPAN><SPAN style="mso-bookmark: _Toc123026768"></SPAN><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 173%"><o:p></o:p></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在性能调优之前，我们首先来了解一下性能是什么？关于性能，我想每个学习过</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的人都能列出几点，甚至可以夸夸其谈。在《</SPAN><SPAN lang=EN-US><FONT face=Arial>Java TM Platform Performance</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">》（<SPAN style="COLOR: blue">注：我有此书的电子版，有需要者可以和我联系</SPAN>）一书中，定义了如下五个方面来作为评判性能的标准：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>1)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">运算的性能——哪一个算法的执行性能最好？</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>2)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">内存的分配——程序运行时需要耗费多少内存？</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>3)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">启动的时间——程序启动需要多长时间？这在</SPAN><SPAN lang=EN-US><FONT face=Arial>Web</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">项目中的影响不大，但要注意部分程序需要部署或运行在客户端时的情形（比如</SPAN><SPAN lang=EN-US><FONT face=Arial>applet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">程序）。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>4)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">程序的可伸缩性——在压力负载的情况下，程序的性能如何？</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>5)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">性能的感知——用户在什么情况下会觉得程序的性能不好？</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">以上五个方面，在具体的使用场景可以有选择的去评判。至于这五方面的性能调优，在后续的章节中将会陆续的给以相应的性能调优策略。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 173%"><FONT face=Arial>1.2 </FONT></SPAN><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 173%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调优的规则</SPAN><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 173%"><o:p></o:p></SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">我们只需要关心对我们程序有影响，可以察觉到的性能问题，而不是每一个类中的每一个方法我们都需要想方设法的提高性能。如果程序的性能没有达到我们所期望的要求，我们才需要考虑如何优化性能。同样的，晦涩的代码虽然提高了程序的性能，但同时可能带给我们的是维护的噩梦。我们需要折中的考虑以上两种情况，使得程序的代码是优美的，并且运行的足够快，达到客户所期望的性能要求。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">优化代码甚至会导致不良的结果，</SPAN><SPAN lang=EN-US><FONT face=Arial>Donald Knuth</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">（一位比较牛比较有影响的人物，具体是谁，我也忘了，谁知道，可以告诉我一下，谢谢！）曾说过，“</SPAN><SPAN lang=EN-US><FONT face=Arial>Premature optimization is the root of all evil”</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。在开始性能调优前，需要先指出不优化代码的一些理由。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>1)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">如果优化的代码已经正常工作，优化后可能会引入新的</SPAN><SPAN lang=EN-US><FONT face=Arial>bug</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>2)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">优化代码趋向于使代码更难理解和维护；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>3)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在一个平台上优化的代码，在另一个平台上可能更糟；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>4)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">花费很多时间在代码的优化上，提高了很少的性能，却导致了晦涩的代码。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">确实，在优化前，我们必须认真的考虑是否值得去优化。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><SPAN lang=EN-US><FONT face=Arial>1.3 </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">调优的步骤</SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">一般我们提高应用程序的性能划分为以下几个步骤：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>1)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">明确应用程序的性能指标，怎样才符合期望的性能需求；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>2)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在目标平台进行测试；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>3)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">如果性能已经达到性能指标，</SPAN><SPAN lang=EN-US><FONT face=Arial>Stop</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>4)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">查找性能瓶颈；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>5)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">修改性能瓶颈；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l3 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>6)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">返回到第</SPAN><SPAN lang=EN-US><FONT face=Arial>2</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">步。</SPAN></P>
<H1 style="MARGIN: 17pt 0cm 16.5pt"><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-size: 22.0pt">二</SPAN><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; mso-bidi-font-size: 22.0pt"><FONT face=Arial> <SPAN lang=EN-US>JDK</SPAN></FONT></SPAN><SPAN style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-size: 22.0pt">调优</SPAN><SPAN lang=EN-US style="FONT-SIZE: 14pt; LINE-HEIGHT: 240%; mso-bidi-font-size: 22.0pt"><o:p></o:p></SPAN></H1>
<H2 style="MARGIN: 13pt 0cm"><SPAN lang=EN-US><FONT face=Arial>2.1 </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">选择合适的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">版本</SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">不同版本的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">，甚至不同厂家的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可能都存在着很大的差异，对于性能优化的程度不同。一般来说，尽可能选择最新发布的稳定的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">版本。最新的稳定的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">版本相对以前的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">版本都会做一些</SPAN><SPAN lang=EN-US><FONT face=Arial>bug</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的修改和性能的优化工作。</SPAN></P>
<H2 style="MARGIN: 13pt 0cm"><SPAN lang=EN-US><FONT face=Arial>2.2 </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">垃圾收集</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆的优化</SPAN></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">垃圾收集就是自动释放不再被程序所使用的对象的过程。当一个对象不再被程序所引用时，它所引用的堆空间可以被回收，以便被后续的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的，并且能够把它们所占据的堆空间释放出来。如果对象不再被使用，但还有被程序所引用，这时是不能被垃圾收集器所回收的，此时就是所谓的“内存泄漏”。监控应用程序是否发生了内存泄漏，有一个非常优秀的监控工具推荐给大家——</SPAN><SPAN lang=EN-US><FONT face=Arial>Quest</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">公司的</SPAN><SPAN lang=EN-US><FONT face=Arial>JProbe</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">工具，使用它来观察程序运行期的内存变化，并可产生内存快照，从而分析并定位内存泄漏的确切位置，可以精确定位到源码内。这个工具的使用我在后续的章节中还会做具体介绍。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆是指在程序运行时分配给对象生存的空间。通过</SPAN><SPAN lang=EN-US><FONT face=Arial>-mx/-Xmx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>-ms/-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">来设置起始堆的大小和最大堆的大小。根据自己</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的版本和厂家决定使用</SPAN><SPAN lang=EN-US><FONT face=Arial>-mx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>-ms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">或</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xmx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">。</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆大小决定了垃圾回收的频度和速度，</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆越大，垃圾回收的频度越低，速度越慢。同理，</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆越小，垃圾回收的频度越高，速度越快。要想设置比较理想的参数，还是需要了解一些基础知识的。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">堆的最大值不能太大，这样会造成系统内存被频繁的交换和分页。所以最大内存必须低于物理内存减去其他应用程序和进程需要的内存。而且堆设置的太大，造成垃圾回收的时间过长，这样将得不偿失，极大的影响程序的性能。以下是一些经常使用的参数设置：</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo4; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>1)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">等于</SPAN><SPAN lang=EN-US><FONT face=Arial>-XmX</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的值；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo4; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>2)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">估计内存中存活对象所占的空间的大小，设置</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">等于此值，</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xmx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">四倍于此值；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo4; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>3)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">等于</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xmx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的</SPAN><SPAN lang=EN-US><FONT face=Arial>1/2</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">大小；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo4; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>4)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">设置</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">介于</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xmx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的</SPAN><SPAN lang=EN-US><FONT face=Arial>1/10</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">到</SPAN><SPAN lang=EN-US><FONT face=Arial>1/4</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">之间；</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo4; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><SPAN style="mso-list: Ignore"><FONT face=Arial>5)</FONT><SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用默认的设置。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">大家需要根据自己的运行程序的具体使用场景，来确定最适合自己的参数设置。</SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">除了</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xmx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">两个最重要的参数外，还有很多可能会用到的参数，这些参数通常强烈的依赖于垃圾收集的算法，所以可能因为</SPAN><SPAN lang=EN-US><FONT face=Arial>JDK</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的版本和厂家而有所不同。但这些参数一般在</SPAN><SPAN lang=EN-US><FONT face=Arial>Web</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">开发中用的比较少，我就不做详细介绍了。在实际的应用中注意设置</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xms</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">和</SPAN><SPAN lang=EN-US><FONT face=Arial>-Xmx</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使其尽可能的优化应用程序就行了。对于性能要求很高的程序，就需要自己再多研究研究</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">虚拟机和垃圾收集算法的机制了。可以看看曹晓钢翻译的《深入</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">虚拟机》一书。</SPAN></P>
<P>&nbsp;</P><img src ="http://www.blogjava.net/patrick/aggbug/25117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-22 19:28 <a href="http://www.blogjava.net/patrick/archive/2005/12/22/25117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>