鍙帶鐨勭幆澧?/b>
鍙?
鎺х殑鐜鏈灝戜篃闇瑕佷袱鍙扮嫭绔嬬殑鏈哄櫒鍜岀涓夊彴鎺у埗鐨勬満鍣ㄣ傚叾涓竴鍙扮敤鏉ョ敓鎴愯礋杞斤紝鍙︿竴鍙頒綔涓烘帶鍒舵満涓庡墠涓鍙板緩绔嬫祴璇曞簲鐢ㄥ茍鎺ュ彈鍙嶉錛岀涓夊彴鏈哄櫒榪愯搴旂敤銆傛
澶栵紝璐熻澆鍜屽簲鐢ㄦ満鍣ㄩ棿鐨勭綉緇滃簲璇ヤ笌灞鍩熺綉鍒嗗紑銆傛帶鍒舵満鎺ュ彈榪愯搴旂敤鏈哄櫒鐨勫弽棣堝鎿嶄綔緋葷粺銆佺‖浠朵嬌鐢ㄧ巼銆佸簲鐢紙鐗瑰埆鏄疺M錛夌殑鐘舵併?br>
璐熻澆妯℃嫙
鏈綺劇‘鐨勬ā鎷熼氬父鐢ㄥ疄闄呯殑鐢ㄦ埛鏁版嵁鍜學EB鏈嶅姟鍣ㄧ鐨勮闂棩蹇椼傚鏋滀綘榪樻病鏈夊疄闄呭竷緗叉垨鑰呯己灝戝疄闄呯殑鐢ㄦ埛鏁版嵁錛屼綘鍙互閫氳繃鏋勯犵被浼肩殑鍦烘櫙鎴栬闂攢鍞拰浜у搧綆$悊鍥㈤槦鎴栧仛涓浜涙湁渚濇嵁鐨勭寽鎯熾傚崗璋冭礋杞芥祴璇曞拰瀹為檯鐢ㄦ埛浣撻獙鏄竴涓寔緇殑榪囩▼銆?br>
鍦?
妯℃嫙涓竴浜涚敤鎴峰満鏅槸蹇呴』鐨勩傚鍦ㄤ竴涓氱敤鍦板潃钖勫簲鐢ㄤ腑錛屼綘搴旇鍖哄垎鏇存柊鍜屾煡璇㈡搷浣溿傚湪鎴戠殑嫻嬭瘯搴旂敤涓璆rinderServlet綾誨彧鏈変竴涓満鏅傚崟鐢?
鎴瘋繛鎺?0嬈¤闂繖涓猻ervlet錛堝湪姣忎竴嬈¤闂棿鏈変竴孌墊殏鍋滐級銆傝櫧鐒惰繖涓簲鐢ㄥ緢灝忥紝鎴戣涓鴻繖鍙互閲嶅涓浜涘父瑙佺殑涓滆タ銆傜敤鎴烽氬父涓嶄細榪炴帴緇欐湇鍔″櫒璇鋒眰鑰?
娌℃湁闂存柇銆傚鏋滄病鏈夐棿鏂紝鎴戜滑鍙兘涓嶈兘寰楀埌鏇寸簿紜殑瀹為檯鐢ㄦ埛涓婇檺銆?br>
涓茶10涓姹傜殑鍙︿竴涓師鍥犳槸瀹為檯搴旂敤涓笉浼氬彧鏈変竴涓狧TTP璇鋒眰銆傚崟涓鑰屽張鍒嗙鐨勮姹傚彲浠ュ獎鍝嶇幆澧冧腑鐨勮澶氬洜绱犮傚Tomcat鏉ヨ錛屼細涓烘瘡涓涓姹傚垱寤轟竴涓細璇濓紝騫朵笖HTTP鍗忚鍏佽涓嶅悓鐨勮姹傞噸鐢ㄨ繛鎺ャ傛垜浼氫慨鏀逛竴涓嬭礋杞芥祴璇曟潵閬垮厤娣鋒揣銆?br>
GrinderServlet綾諱笉浼氭墽琛屼換浣曟帓搴忔搷浣滐紝浣嗚繖涓渶姹傚湪澶ч儴鍒嗗簲鐢ㄤ腑閮藉緢鏅氥傚湪榪欎簺搴旂敤涓紝浣犻渶瑕佸垱寤烘ā鎷熺殑鏁版嵁闆嗗茍涓旂敤浠栦滑鏉ユ瀯閫犵浉鍏崇敤渚嬬殑璐熻澆嫻嬭瘯銆?br>
渚嬪錛屽鏋滅敤渚嬫秹鍙婂埌鐢ㄦ埛鐧誨綍涓涓猈EB搴旂敤錛屼粠鍙兘鐨勭敤鎴峰垪琛ㄤ腑閫夊彇闅忔満鐨勭敤鎴蜂細鍙嬌鐢ㄤ竴涓敤鎴鋒洿綺劇‘銆傚惁鍒欙紝浣犲彲鑳戒笉緇忔剰鍦頒嬌鐢ㄤ簡緋葷粺緙撳瓨鎴栧叾浠栫殑浼樺寲鎴栦竴浜涘井濡欑殑涓滆タ錛岃岃繖浼氫嬌寰楃粨鏋滀笉姝g‘銆?br>
璐熻澆嫻嬭瘯杞歡
璐?
杞芥祴璇曡蔣浠跺彲浠ユ瀯閫犳祴璇曞満鏅茍涓斿鏈嶅姟榪涜璐熻澆嫻嬭瘯銆傛垜浼氬湪涓嬮潰鐨勭ず渚嬩腑浣跨敤OpenSTA嫻嬭瘯杞歡銆傝繖杞歡綆鍗曟槗瀛︼紝緇撴灉涔熷緢瀹規槗瀵煎嚭錛屽茍涓旀敮鎸佸弬鏁板寲
鑴氭湰錛岃繕鍙互鐩戣淇℃伅鐨勫彉鍖栵紝浠栫殑涓昏緙虹偣鏄熀浜嶹indows錛屼絾鍦ㄨ繖鍎夸笉鏄釜闂銆傚綋鐒惰繕鏈夊緢澶氬彲閫夐」濡侫pache鐨凧Meter鍜孧ercury
鐨凩oadRunner銆?br>
The GrinderServlet
鍒楄〃1涓樉紺轟簡GrinderServlet綾伙紝鍒楄〃2涓樉紺轟簡Grinder綾?br>Listing 1
package pub.capart;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GrindServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
Grinderv1 grinder = Grinderv1.getGrinder();
long t1 = System.currentTimeMillis();
grinder.grindCPU(13);
long t2 = System.currentTimeMillis();
PrintWriter pw = res.getWriter();
pw.print("<html>\n< body> \n");
pw.print("Grind Time = "+(t2-t1));
pw.print("< body> \n< /html> \n");
}
}
Listing 2
package pub.capart;
/**
* This is a simple class designed to simulate an application consuming
* CPU, memory, and contending for a synchronization lock.
*/
public class Grinderv1 {
private static Grinderv1 singleton = new Grinderv1();
private static final String randstr =
"this is just a random string that I'm going to add up many many times";
public static Grinderv1 getGrinder() {
return singleton;
}
public synchronized void grindCPU(int level) {
StringBuffer sb = new StringBuffer();
String s = randstr;
for (int i=0;i<level;++i) {
sb.append(s);
s = getReverse(sb.toString());
}
}
public String getReverse(String s) {
StringBuffer sb = new StringBuffer(s);
sb = sb.reverse();
return sb.toString();
}
}
綾?
寰堢畝鍗曪紝浣嗕粬浠細浜х敓涓や釜寰堝父瑙佺殑闂銆傚拫涓鐪嬬摱棰堝彲鑳界敱grindCPU()鏂規硶鐨勫悓姝ヤ慨楗扮寮曡搗錛屼絾瀹為檯涓婂唴瀛樻秷鑰楁墠鏄湡姝g殑闂鎵鍦ㄣ傚鍥?錛屾垜鐨?
絎竴涓礋杞芥祴璇曟樉紺轟簡甯歌鐨勮礋杞藉彉鍖栥傚湪榪欓噷璐熻澆鍙樺寲寰堥噸瑕佸洜涓轟綘姝e湪妯℃嫙涓涓珮鐨勮礋杞姐傝繖縐嶇儹韜殑鏂瑰紡涔熸洿綺劇‘鍥犱負閬垮厤浜咼SP緙栬瘧寮曡搗鐨勯棶棰樸傛垜閫氬父
涔犳儻浜庡湪榪涜璐熻澆嫻嬭瘯鍓嶅厛榪涜鍗曠敤鎴鋒ā鎷熴?br>

Figure 1
鎴?
鍦ㄨ繖綃囨枃绔犱腑浼氫嬌鐢ㄧ浉鍚岀殑瀹歸噺灝忕粨鍥俱傚湪鎵ц璐熻澆嫻嬭瘯鏃惰繕鏈夋洿澶氱殑鍙敤淇℃伅錛屼絾榪欓噷鍙敤浜嗘湁鐢ㄧ殑閮ㄥ垎銆傛渶涓婇潰鐨勯潰鏉垮寘鍚瘡縐掑畬鎴愮殑璇鋒眰鏁板拰璇鋒眰鏃墮棿淇℃伅銆?
絎簩涓潰鏉垮寘鍚椿鍔ㄧ敤鎴鋒暟鍜屽け璐ョ巼錛屾垜灝嗚秴鏃躲佷笉姝g‘鐨勬湇鍔″櫒搴旂瓟鍜岄暱浜?縐掔殑璇鋒眰璁や負鏄け璐ョ殑銆傜涓変釜闈㈡澘鍖呭惈JVM鍐呭瓨緇熻鍜孋PU浣跨敤鐜囥侰PU鍊?
鏄墍鏈夊鐞嗗櫒鐨勭敤鎴鋒椂闂寸殑騫沖潎鍊鹼紝榪欓噷鎵鏈夌殑嫻嬭瘯鏈哄櫒閮芥槸鍙孋PU鐨勩傚唴瀛樼粺璁″浘鍖呭惈鍨冨溇鍥炴敹琛ㄥ拰姣忕鍨冨溇鍥炴敹鏁般?br>
鍥?涓袱涓渶鏄庢樉鐨勬暟鎹槸50%鐨凜PU浣跨敤鐜囧拰澶ч噺鍐呭瓨浣跨敤鍜岄噴鏀俱備粠鍒楄〃2涓彲浠ョ湅鍑鴻繖涓師鍥犮傚悓姝ヤ慨楗扮瀵艱嚧鎵鏈夎繘紼嬩覆琛屽鐞嗭紝灝卞ソ鍍忓彧鐢ㄤ簡涓涓狢PU錛岃岀畻娉曞鑷村ぇ閲忓唴瀛樻秷鑰楀湪灞閮ㄥ彉閲忎笂銆?br>
閫氳繃CPU鏄釜鍙楅檺鐨勮祫婧愶紝濡傛灉鍦ㄨ繖涓祴璇曚腑鎴戝彲浠ュ畬鍏ㄥ埄鐢ㄥ埌涓や釜CPU鐨勮瘽灝卞彲浠ユ彁楂樹竴鍊嶇殑鎬ц兘銆傚瀮鍦懼洖鏀跺櫒榪愯寰楀姝ら綣佷互鑷翠簬涓嶈兘蹇界暐銆傚湪嫻嬭瘯涓瘡縐掗噴鏀劇殑鍐呭瓨杈懼埌100M錛屽緢鏄劇劧榪欐槸涓檺鍒跺洜绱犮傚け璐ユ暟榪欎箞澶ф槑鏄捐繖涓簲鐢ㄦ槸涓嶅彲鐢ㄧ殑銆?br>
鐩戣
鍦ㄧ敓鎴愬悎鐞嗙殑鐢ㄦ埛璐熻澆鍚庯紝鐩戣宸ュ叿闇瑕佹敹闆嗚繘紼嬬殑榪愯鐘跺喌銆傚湪鎴戠殑嫻嬭瘯鐜涓彲浠ユ敹闆嗗埌鍚勭鏈夌敤鐨勪俊鎭細
1銆?nbsp; 鎵鏈夎綆楁満銆佺綉緇滆澶?br>2銆?nbsp; 絳夌瓑鐨勪嬌鐢ㄧ巼
3銆?nbsp; JVM鐨勭粺璁℃暟鎹?br>4銆?nbsp; 涓埆JAVA鏂規硶鎵鑺辮垂鐨勬椂闂淬?br>5銆?nbsp; 鏁版嵁搴撴ц兘淇℃伅錛?銆?nbsp; 鍖呮嫭SQL鏌ヨ鐨勭粺璁°?br>7銆?nbsp; 鍏朵粬搴旂敤鐩稿叧鐨勪俊鎭?br>
褰?
鐒惰繖浜涚洃瑙嗕篃浼氬獎鍝嶈礋杞芥祴璇曪紝浣嗗鏋滃獎鍝嶆瘮杈冨皬涔熷彲浠ュ拷鐣ャ傚熀鏈笂濡傛灉鎴戜滑鎯寵幏鍙栨墍鏈変笂闈㈢殑淇℃伅錛岃偗瀹氫細褰卞搷嫻嬭瘯鐨勬ц兘銆備絾濡傛灉涓嶆槸涓嬈¤幏鍙栨墍鏈変俊鎭繕鏄?
鏈夊彲鑳戒繚璇佽礋杞芥祴璇曠殑鏈夋晥鎬с備粎瀵圭壒瀹氱殑鏂規硶璁劇疆瀹氭椂鍣紝浠呰幏鍙栦綆璐熻澆鐨勭‖浠朵俊鎭拰浣庨鐜囧湴鑾峰彇鏍蜂緥鏁版嵁銆傚綋鐒朵笉鍔犺澆鐩戣鍣ㄦ潵鍋氭祴璇曟槸鏈濂界殑錛岀劧鍚庡拰鍔犺澆
鐩戣鍣ㄧ殑嫻嬭瘯鏉ュ仛姣旇緝銆傝櫧鐒舵湁鏃跺欎鏡鍏ュ紡鐩戣鏄釜濂戒富鎰忥紝浣嗗氨涓嶅彲鑳芥湁鐩戣緇撴灉浜嗐?br>
鑾峰彇鎵鏈夌洃瑙嗘暟鎹埌涓涓腑澶帶鍒跺櫒鏉ュ仛鍒嗘瀽鏄?
鏈濂界殑錛屼絾浣跨敤鍔ㄦ佽繍琛屾椂宸ュ叿涔熷彲浠ユ彁渚涙湁鐢ㄧ殑淇℃伅銆備緥濡傦紝鍛戒護琛屽伐鍏峰PS銆乀OP銆乂MSTAT鍙互鎻愪緵UNIX鏈哄櫒鐨勪俊鎭紱鎬ц兘鐩戣鍣ㄥ伐鍏峰彲浠ユ彁渚?
WINDOWS鏈哄櫒鐨勪俊鎭紱鑰孴eamQuest, BMC Patrol, SGI's Performance Co-Pilot, and
ISM's
PerfMan榪欐牱鐨勫伐鍏蜂細鍦ㄦ墍鏈夌殑嫻嬭瘯鐜涓殑鏈哄櫒瀹夎浠g悊騫朵笖灝嗛渶瑕佺殑淇℃伅浼犲洖涓ぎ鎺у埗鏈猴紝榪欐牱灝卞彲浠ユ彁渚涙枃鏈垨鍙鍖栫殑淇℃伅銆傚湪鏈枃涓紝鎴戜嬌鐢ㄥ紑婧?
鐨凱erformance Co-Pilot浣滀負嫻嬭瘯緇熻鐨勫伐鍏楓傛垜鍙戠幇浠栧嫻嬭瘯鐜鐨勫獎鍝嶆渶灝忥紝騫朵笖浠ョ浉瀵圭洿鎺ョ殑鏂瑰紡鏉ユ彁渚涙暟鎹?br>
JAVA
鍒嗘瀽鍣ㄦ彁渚涘緢澶氫俊鎭紝浣嗛氬父瀵硅礋杞芥祴璇曟潵璇村獎鍝嶅お澶ц屾病鏈夊お澶氱殑鐢ㄥ銆傚伐鍏風敋鑷沖彲浠ヨ浣犲湪璐熻澆鏈嶅姟鍣ㄤ笂鍋氫竴浜涘垎鏋愶紝浣嗚繖涔熷緢瀹規槗渚挎祴璇曟棤鏁堛傚湪榪欎簺嫻嬭瘯
涓紝鎴戞縺媧諱簡璇︾粏鐨勫瀮鍦炬敹闆嗗櫒鏉ユ敹闆嗗唴瀛樹俊鎭傛垜涔熶嬌鐢╦console 鍜宩stack宸ュ叿錛堝寘鍚湪J2SE
1.5涓級鏉ユ鏌ラ珮璐熻澆涓嬬殑VM銆傛垜娌℃湁淇濈暀榪欎簺嫻嬭瘯鐢ㄤ緥涓礋杞芥祴璇曠殑緇撴灉鍥犱負鎴戣涓鴻繖浜涙暟鎹笉鏄緢姝g‘銆?br>
鍚屾鐡墮
鍦?
璇婃柇鏈嶅姟鍣ㄩ棶棰樻椂綰跨▼鐨勪俊鎭槸闈炲父鏈夌敤鐨勶紝鐗瑰埆鏄鍚屾涔嬬被鐨勯棶棰樸俲stack宸ュ叿鍙互榪炴帴鍒拌繍琛岀殑榪涚▼騫朵笖淇濆瓨姣忎竴涓嚎紼嬬殑鍫嗘爤淇℃伅銆傚湪UNIX緋葷粺
鍙互鐢ㄤ俊鍙烽噺3鏉ヤ繚瀛樼嚎紼嬬殑鍫嗘爤淇℃伅錛屽湪WINDOWS緋葷粺鐨勬帶鍒跺彴涓彲浠ョ敤Ctrl-Break銆傚湪絎竴欏規祴璇曚腑錛宩stack鎸囧嚭璁稿綰跨▼鍦?
grindCPU()鏂規硶涓闃誨銆?br>
浣犲彲浠ュ凡緇忔敞鎰忓埌鍒楄〃2涓璯rindCPU()鏂規硶鐨勫悓姝ヤ慨楗扮瀹為檯涓婂茍涓嶅繀欏匯傛垜鍦ㄥ悗涓欏規祴璇曚腑鍒犻櫎浜嗕粬錛屽鍥?鏄劇ず

Figure 2
鍦ㄥ浘2涓紝浣犱細娉ㄦ剰鍒版ц兘涓嬮檷浜嗐傝櫧鐒舵垜浣跨敤浜嗘洿澶氱殑CPU錛屼絾鍚炲悙閲忓拰澶辮觸鏁伴兘鏇村樊浜嗐傝櫧鐒跺瀮鍦懼洖鏀跺懆鏈熷彉浜嗭紝浣嗘瘡縐掍緷鐒墮渶瑕佸洖鏀?00M銆傛樉鐒舵垜浠繕娌℃湁鎵懼埌涓昏鐨勭摱棰堛?br>闈?
绔熶簤鐨勫悓姝ョ浉瀵逛簬綆鍗曠殑鍑芥暟璋冪敤榪樻槸寰堣垂鏃剁殑銆傜珶浜夋х殑鍚屾灝辨洿璐規椂浜嗭紝鍥犱負闄や簡鍐呭瓨闇瑕佸悓姝ュ錛孷M榪橀渶瑕佺淮鎶ょ瓑寰呯殑綰跨▼銆傚湪榪欑鐘跺喌涓嬶紝榪欎簺浠d環瀹為檯
涓婅灝忎簬鍐呭瓨鐡墮銆傚疄闄呬笂錛岄氳繃娑堥櫎浜嗗悓姝ョ摱棰堬紝VM鍐呭瓨緋葷粺鎵挎媴浜嗘洿澶氱殑鍘嬪姏鏈鍚庡鑷存洿宸殑鍚炲悙閲忥紝鍗充嬌鎴戜嬌鐢ㄤ簡鏇村鐨凜PU銆傛樉鐒舵渶濂界殑鏂瑰紡鏄粠鏈澶?
鐨勭摱棰堝紑濮嬶紝浣嗘湁鏃惰繖涔熶笉鏄緢瀹規槗紜畾鐨勩傚綋鐒訛紝紜繚VM鐨勫唴瀛樺鐞嗚凍澶熸甯鎬篃鏄竴涓ソ鐨勫紑濮嬫柟鍚戙?br>
鍐呭瓨鐡墮
鐜板湪鎴戜細棣栧厛涔熷畾浣嶅唴瀛橀棶棰樸傚垪琛?鏄疓rinderServlet鐨勯噸鏋勭増鏈紝浣跨敤浜哠tringBuffer瀹炰緥銆傚浘3鏄劇ず浜嗘祴璇曠粨鏋溿?br>
Listing 3
package pub.capart;
/**
* This is a simple class designed to simulate an application consuming
* CPU, memory, and contending for a synchronization lock.
*/
public class Grinderv2 {
private static Grinderv2 singleton = new Grinderv2();
private static final String randstr =
"this is just a random string that I'm going to add up many many times";
private StringBuffer sbuf = new StringBuffer();
private StringBuffer sbufrev = new StringBuffer();
public static Grinderv2 getGrinder() {
return singleton;
}
public synchronized void grindCPU(int level) {
sbufrev.setLength(0);
sbufrev.append(randstr);
sbuf.setLength(0);
for (int i=0;i<level;++i) {
sbuf.append(sbufrev);
reverse();
}
return sbuf.toString();
}
public String getReverse(String s) {
StringBuffer sb = new StringBuffer(s);
sb = sb.reverse();
return sb.toString();
}
}

Figure 3
閫?
甯擱噸鐢⊿tringBuffer騫朵笉鏄竴涓ソ涓繪剰錛屼絾榪欓噷鎴戝彧鏄負浜嗛噸鐜頒竴浜涘父瑙佺殑闂錛岃屼笉閲忔彁渚涜В鍐蟲柟妗堛傚唴瀛樻暟鎹凡緇忎粠鍥句笂娑堝け浜嗗洜涓烘祴璇曚腑娌℃湁鍨?
鍦懼洖鏀跺櫒榪愯銆傚悶鍚愰噺鎴忓墽鎬х殑澧炲姞鑰孋PU浣跨敤鐜囧張鍥炲埌浜?0%銆傚垪琛?涓嶅彧鏄紭鍖栦簡鍐呭瓨錛屼絾鎴戣涓轟富瑕佷簡鏀瑰杽浜嗚繃搴︾殑鍐呭瓨娑堣椼?br>
媯瑙嗗悓姝ョ摱棰?/span>
鍒楄〃4鍙︿竴涓狦rinderServlet綾葷殑閲嶆瀯鐗堟湰錛屽疄鐜頒簡涓涓皬鐨勮祫婧愭睜銆傚浘4鏄劇ず浜嗘祴璇曠粨鏋溿?br>Listing 4
package pub.capart;
/**
* This is just a dummy class designed to simulate a process consuming
* CPU, memory, and contending for a synchronization lock.
*/
public class Grinderv3 {
private static Grinderv3 grinders[];
private static int grinderRoundRobin = 0;
private static final String randstr =
"this is just a random string that I'm going to add up many many times";
private StringBuffer sbuf = new StringBuffer();
private StringBuffer sbufrev = new StringBuffer();
static {
grinders = new Grinderv3[10];
for (int i=0;i<grinders.length;++i) {
grinders[i] = new Grinderv3();
}
}
public synchronized static Grinderv3 getGrinder() {
Grinderv3 g = grinders[grinderRoundRobin];
grinderRoundRobin = (grinderRoundRobin +1) % grinders.length;
return g;
}
public synchronized void grindCPU(int level) {
sbufrev.setLength(0);
sbufrev.append(randstr);
sbuf.setLength(0);
for (int i=0;i<level;++i) {
sbuf.append(sbufrev);
reverse();
}
return sbuf.toString();
}
public String getReverse(String s) {
StringBuffer sb = new StringBuffer(s);
sb = sb.reverse();
return sb.toString();
}
}

Figure 4
鍚炲悙閲忔湁涓瀹氱殑澧炲姞錛岃屼笖浣跨敤鏇村皯鐨凜PU璧勬簮銆傜珶浜夊拰闈炵珶浜夋у悓姝ラ兘鏄垂鏃剁殑錛屼絾閫氬父鏈澶х殑鍚屾娑堣楁槸鍑忓皯浜嗙郴緇熺殑鍙幾緙╂с傛垜鐨勮礋杞芥祴璇曚笉鍐嶆弧瓚崇郴緇熺殑闇姹備簡錛屽洜姝ゆ垜澧炲姞浜嗚櫄鎷熺殑鐢ㄦ埛鏁幫紝濡傚浘5 鎵紺恒?br>

Figure 5
鍦ㄥ浘5 涓悶鍚愰噺鍦ㄨ礋杞借揪鍒伴ケ鍜屾椂涓嬮檷浜嗕竴浜涚劧鍚庡湪璐熻澆鍑忓皯鏃跺張鎻愰珮浜嗐傛澶栨敞鎰忓埌嫻嬭瘯浣垮緱CPU浣跨敤鐜囪揪鍒?00%錛岃繖鎰忓懗鐫嫻嬭瘯瓚呰繃浜嗙郴緇熺殑鏈浣沖悶鍚愰噺銆傝礋杞芥祴璇曠殑涓涓駭鍑烘槸鎬ц兘璁″垝錛屽綋搴旂敤鐨勮礋杞借秴榪囦粬鐨勫閲忔椂浼氫駭鐢熸洿浣庣殑鍚炲悙閲忋?br>
姘村鉤鍙幾緙╂?/span>
姘村鉤浼哥緝鍏佽鏇村ぇ鐨勬ц兘錛屼絾騫朵笉涓瀹氭槸璐圭敤鐩稿叧鐨勩傝繍琛屽湪澶氫釜鏈嶅姟鍣ㄤ笂鐨勫簲鐢ㄩ氬父姣旇緝榪愯鍦ㄥ崟涓猇M涓婄殑搴旂敤澶嶆潅銆備絾姘村鉤浼哥緝鏀寔鍦ㄦц兘涓婄殑鏈澶у鍔犮?br>
鍥?鏄垜鐨勬渶鍚庝竴欏規祴璇曠殑緇撴灉銆傛垜宸茬粡鍦ㄤ笁鍙板熀鏈竴鑷寸殑鏈哄櫒涓婁嬌鐢ㄤ簡璐熻澆騫寵 錛屽彧鏄湪鍐呭瓨鍜孋PU閫熷害涓婄◢鏈変笉鍚屻傛葷殑鍚炲悙閲忚楂樹簬涓夊嶇殑鍗曟満緇撴灉錛岃屼笖CPU浠庢潵娌℃湁瀹屽叏鍒╃敤銆傚湪鍥?涓垜鍙樉紺轟簡涓鍙版満鍣ㄤ笂鐨凜PU緇撴灉錛屽叾浠栫殑鏄竴鏍風殑銆?br>

Figure 6
灝忕粨
鎴戞浘緇忚姳浜?涓湀鏉ュ竷緗蹭竴涓鏉傜殑JAVA搴旂敤錛屼絾鍗存病鏈夋椂闂存潵鍋氭ц兘璁″垝銆備絾宸姴鐨勬ц兘浣垮緱鐢ㄦ埛鍚堢害鍑犱箮涓銆傚紑鍙戜漢鍛樹嬌鐢ㄥ垎鏋愬櫒鑺變簡寰堥暱鏃墮棿鎵懼埌鍑犱釜灝忛棶棰樹絾娌℃湁瑙e喅鏍規湰鐨勭摱棰堬紝鑰屼笖琚悗緇殑闂瀹屽叏榪鋒儜浜嗐傛渶鍚庨氳繃璐熻澆嫻嬭瘯鎵懼埌瑙e喅鏂規硶錛屼絾浣犲彲浠ユ兂鍒板叾涓殑澶勫銆?br>
鍙堜竴嬈℃垜紕板緱鏇撮毦鐨勯棶棰橈紝搴旂敤鍙兘杈懼埌鎵棰勬湡鎬ц兘鐨?/100銆備絾閫氳繃鍓嶆湡媯嫻嬪埌鐨勯棶棰樺拰璁よ瘑鍒拌礋杞芥祴璇曠殑蹇呰鎬э紝榪欎釜闂寰堝揩琚В鍐充簡銆傝礋杞芥祴璇曠浉瀵逛簬鏁翠釜杞歡寮鍙戠殑鑺辮垂騫朵笉澶氾紝浣嗗叾鎵褰掗伩鐨勯闄╁氨楂樺浜嗐?br>
鍏充簬浣滆?/b>
Ivan
Small鎷ユ湁14騫寸殑杞歡寮鍙戠粡楠屻備粬鍦↙BNL浠庡紑鍙慡upernovae Cosmology
Project寮濮嬩粬鐨勮亴涓氱敓娑傝繖涓」鐩槸瀵艱嚧鍙嶉噸鍔涘拰鏃犻檺鎵╁睍瀹囧畽鐞嗚琚彂鐜扮殑涓や釜欏圭洰涔嬩竴銆備粬浠庢宸ヤ綔浜庢暟鎹寲鎺樺拰浼佷笟綰AVA搴旂敤銆傜幇鍦ㄤ粬鏄?
nnovative Interfaces鍏徃鐨勯甯蔣浠跺伐紼嬪笀銆?br>
璧勬簮
路javaworld.com:javaworld.com
路Matrix-Java寮鍙戣呯ぞ鍖?http://www.matrix.org.cn/
路JAVA鎬ц兘璋冧紭絎簩鐗?http://www.amazon.com/exec/obidos/ASIN/0596003773/javaworld
路騫跺彂緙栫▼鎶鏈細JAVA騫跺彂緙栫▼絎簩鐗?http://www.amazon.com/exec/obidos/ASIN/0201310090/javaworld
路JAVA緗戠珯鍒嗘瀽錛欽AVA緗戠珯鐨勬ц兘鍒嗘瀽:http://www.amazon.com/exec/obidos/ASIN/0201844540/javaworld
路JAVA鎬ц兘錛氶珮鎬ц兘JAVA騫沖彴璁$畻:http://www.amazon.com/exec/obidos/ASIN/0130161640/javaworld
路JAVA2鎬ц兘鍜屾湳璇寚鍗?http://www.amazon.com/exec/obidos/ASIN/0130142603/javaworld
路BEA WebLogic鏈嶅姟鍣ㄦц兘璋冧紭錛屽寘鍚湁鐢ㄧ殑涓鑸俊鎭細BEA WebLogic鏈嶅姟鍣ㄤ笂J2EE搴旂敤鎬ц兘嫻嬭瘯:http://www.amazon.com/exec/obidos/ASIN/1904284000/javaworld
路JAVA鎬ц兘璋冧紭:http://www.javaperformancetuning.com
路榪囧害鐨凧AVA鍚屾:鈥滆交閲忕駭綰跨▼鈥?http://www-106.ibm.com/developerworks/java/library/j-threads1.html
路璐熻澆鍜屾ц兘嫻嬭瘯宸ュ叿錛歨ttp://www.softwareqatest.com/qatweb1.html#LOAD 
]]>