??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成a人在线看天堂无码,亚洲春色另类小说,国产AV旡码专区亚洲AV苍井空http://www.tkk7.com/patrick/Patrick's Blogzh-cnSat, 10 May 2025 12:12:37 GMTSat, 10 May 2025 12:12:37 GMT60Portal Framework介绍Q第一部分Q?/title><link>http://www.tkk7.com/patrick/archive/2006/02/23/32098.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Thu, 23 Feb 2006 06:32:00 GMT</pubDate><guid>http://www.tkk7.com/patrick/archive/2006/02/23/32098.html</guid><wfw:comment>http://www.tkk7.com/patrick/comments/32098.html</wfw:comment><comments>http://www.tkk7.com/patrick/archive/2006/02/23/32098.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/patrick/comments/commentRss/32098.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/patrick/services/trackbacks/32098.html</trackback:ping><description><![CDATA[     摘要: ??    1 概述... 3 2 基本概念... 3 2.1 Portal定义... 3 2.2 Portlet定义... 4 2.3 Portal面的元?.. 5 2.4 Portlet生命周期... 6 2.5 Portlet标签?.. 7 2.6 JSR168和WSRP. 7 3 Portal的功?.. 8 4 部分开源Portal?..  <a href='http://www.tkk7.com/patrick/archive/2006/02/23/32098.html'>阅读全文</a><img src ="http://www.tkk7.com/patrick/aggbug/32098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2006-02-23 14:32 <a href="http://www.tkk7.com/patrick/archive/2006/02/23/32098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2005q的最后一天和h们一起度q?/title><link>http://www.tkk7.com/patrick/archive/2005/12/31/26224.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Sat, 31 Dec 2005 14:58:00 GMT</pubDate><guid>http://www.tkk7.com/patrick/archive/2005/12/31/26224.html</guid><wfw:comment>http://www.tkk7.com/patrick/comments/26224.html</wfw:comment><comments>http://www.tkk7.com/patrick/archive/2005/12/31/26224.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.tkk7.com/patrick/comments/commentRss/26224.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/patrick/services/trackbacks/26224.html</trackback:ping><description><![CDATA[  <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN>2005</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q最后一天了Q应该好好的放松一下心情,NL愉快的电(sh)影好好的享受一下,然后一觉睡?/SPAN><SPAN lang=EN-US>2006</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q中午,感觉真是太好了。进大学以来Q?zhn)闲的大学生活把自己培L了一个狂热的?sh)媄爱好者。今天要找一部轻松愉快的?sh)媄Q该换换口味了,前段旉不是看紧张刺Ȁ的美国大片,是看耐hd的反映中q危机的?sh)媄Q再看自q要变成一个小老头了,呵呵</SPAN><SPAN lang=EN-US>~~~</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。_斯尼的电(sh)׃向轻松愉快的题材ZQ最q的新片《纳g传奇Q狮王、女巫和衣》据说很是不错,真后(zhn)刚才回家的时候没有把</SPAN><SPAN lang=EN-US>DVD</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">U回来看Q真是失误!没办法,q好自己?/SPAN><SPAN lang=EN-US>200</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US>G</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的大盘中收藏了不少好电(sh)影,</SPAN> <SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一搜?/SPAN><SPAN lang=EN-US>…?/SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q哈哈,q斯的《超人高校》,׃了。早听说此片不错了Q最q一直比较忙Q居然让q么一部好?sh)媄在我的硬盘中沉睡达数月之久?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">准备好一堆零食和水果Q开?/SPAN><SPAN lang=EN-US>…?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN>…?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN>…?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN>…?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">不错Q不错,的确不错Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">l过近</SPAN><SPAN lang=EN-US>2</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个小时的快乐的电(sh)影时光,和一超Z一起度q了</SPAN><SPAN lang=EN-US>2005</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q的最后一天!</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q部?sh)媄又是一部类伹{哈利L牏V的?sh)媄Q一有着特异功能的孩子们在超人学校里的故事。最q几q这L?sh)媄好像特别火,上映一部火一部,从《哈利L牏V,《指环王》到《地传说》,《冲出宁静号》,再到今天q部《超人高校》。不q看完后Q感觉还是挺好的Q今天晚上可以好好的睡一觉了?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">看完?sh)媄Q和往怸P有一些感惛_l典台词惛_我的朋友们一起分享分?/SPAN><SPAN lang=EN-US>…?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">感想Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">1)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">能力强固然是一件好事,但更重要的是人品。而h品好能力一般的人,能力通过学习和锻D是可以慢慢培d获得的。最有说服力的例子就是阿甘了?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">2)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">光个力强Q如果没有助手的协助Q也不能成就</SPAN><SPAN lang=EN-US>Super Heroes</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的辉煌成?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">团队_其重要?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">4)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">向那些工作在q_岗位的h和在我n受电(sh)q时候还在加班的以崇高的敬意?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">l典台词Q?/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: 'Times New Roman'"><SPAN style="mso-list: Ignore">1)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN lang=EN-US>You look at them and see the defenders of the world. All I see is my dad wearing tights. Don’t get me wrong. It can be cool to have superhero parents, like when Mom picks up awesome takeout on her way home from work. On the other hand, living up to the family name means that I’m supposed to save the world someday. </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US style="COLOR: blue">1) </SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在你们眼里,他们是世界的保卫者。在我眼里是爸爸I着紧n衣。别想错了,有超U英雄做父母是很LQ比如妈妈在下班的时候买来美味的外卖。但另一斚wQ承家族的姓氏意味着有一天我也要拯救世界?/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><o:p> </o:p></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: 'Times New Roman'"><SPAN style="mso-list: Ignore">2)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN lang=EN-US>Good thinking. Don’t want to bulk up. Nah, going more for definition.</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="COLOR: blue; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">2)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">好主意,让体形长得不要太壮。要把肌肉线条练出来?/SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo3; tab-stops: list 39.0pt"><SPAN lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN lang=EN-US>Oh, Will, uh, a reminder. A lot of the kids at Sky High will only have one superhero parent, not two, so take it easy on them, huh? No showing off. Aw, Dad. Not to worry. I’ll keep it low-key. </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="COLOR: blue; mso-fareast-font-family: 'Times New Roman'"><SPAN style="mso-list: Ignore">3)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">哦,威尔Q提醒你一下。很多超人高校的孩子父母中只有一个超U英雄,而不是两个,所以别他们Q也不要炫耀。哦Q爸爸,别担心,我会保持低姿态?/SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></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: 'Times New Roman'"><SPAN style="mso-list: Ignore">4)<SPAN style="FONT: 7pt 'Times New Roman'">      </SPAN></SPAN></SPAN><SPAN lang=EN-US>But this year, it will be my privilege to help each of you become the very best hero support that you can be. Without hero support, there wouldn’t be any heroes. All right, there probably would be heroes, but they would be very lonely. Lonely heroes indeed. </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US style="COLOR: blue">4) </SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今年是我的荣q来帮助你们成ؓ最好的英雄助手Q没有助手的支持Q就不会有Q何英雄。哎Q可能会有英雄,但他们会很孤独。孤独的英雄?/SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US>5) Will is a great kid. This is not the end of the world. OK. So maybe we won’t be the Stronghold Three, the greatest family of superheroes the world has ever known.. But we will be the Stronghold Three, the greatest family the world has ever known.</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US style="COLOR: blue">5) </SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">威尔是个好孩子,q不是世界末日到了。好Q尽我们不能成为斯Ҏ(gu)霍d三侠Q世界上史无前例的超U英雄家庭。但我们可以是斯Ҏ(gu)霍三人组Q世界上史无前例的最好家庭?/SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US>6) To let true love remain unspoken is the quickest route to a heavy heart.</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US style="COLOR: blue">6) </SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默默无言的爱是抵辑ֿ灉|快的途径?/SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US>7) She’s right. It’s gonna take all of us. All of who? You and Warren? The rest of us are only sidekicks. Just because you have powers, that dosen’t make you a hero. Sometimes it just makes you a jerk. Make me a jerk. </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US style="COLOR: blue">7) </SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">她说的没错,q需要大家的齐心合力。哪里来的大Ӟ除了你和沃uQ其它的人都只是助手。有异能不能代表你就是个英雄。有时它只能让你成ؓ一个؜蛋,让我成ؓ一个؜蛋?/SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US>8) Even though it appears Gwen only came up with this award as a way to lure you to the dance and your ultimate doom, still it’s inscribed, so?I’d be honored to accept this “Hero of the Year?award. But I’m afraid this doesn’t belong to us. It belongs to them.. The sidekicks. I mean, hero support. Why don’t we just call them what they really are, Josie? Heroes. </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; tab-stops: 144.0pt"><SPAN lang=EN-US style="COLOR: blue">8) </SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然q个奖项只是Z们下的圈套,你们q是名副其实</SPAN><SPAN lang=EN-US style="COLOR: blue">?</SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我非常荣q能取得q个q度奖项Q但我想q个荣誉不属于我们。这属于他们Q助手们。我是说Q英雄支持。那q不如直截了当的U呼他们呢?英雄们?/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>9) So in the end, my girlfriend became my archenemy, my archenemy became my best friend, and my best friend became my girlfriend. But, hey, that’s high school. </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US style="COLOR: blue">9) </SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最后,我的x友成了我的敌人,我的敌h成了我最好的朋友Q我的好朋友成了我的x友。这是高中生活?/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 lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1">       </SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最后,提一下,在这部媄片中的主?SPAN style="COLOR: blue">q克?/SPAN></SPAN><SPAN lang=EN-US style="COLOR: blue">·</SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">安格拉诺</SPAN><SPAN lang=EN-US style="COLOR: blue"> Michael Angarano</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?SPAN style="COLOR: blue">丹妮?/SPAN></SPAN><SPAN lang=EN-US style="COLOR: blue">·</SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">帕娜帕克</SPAN><SPAN lang=EN-US style="COLOR: blue"> Danielle Panabaker</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q他们有可能成ؓ来的巨星哦Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Thank you for reading my blog. I wish you a happy new year and see you next year!</SPAN></P><img src ="http://www.tkk7.com/patrick/aggbug/26224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-31 22:58 <a href="http://www.tkk7.com/patrick/archive/2005/12/31/26224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts已死Q?Q?/title><link>http://www.tkk7.com/patrick/archive/2005/12/30/26063.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Fri, 30 Dec 2005 07:14:00 GMT</pubDate><guid>http://www.tkk7.com/patrick/archive/2005/12/30/26063.html</guid><wfw:comment>http://www.tkk7.com/patrick/comments/26063.html</wfw:comment><comments>http://www.tkk7.com/patrick/archive/2005/12/30/26063.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.tkk7.com/patrick/comments/commentRss/26063.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/patrick/services/trackbacks/26063.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P><SPAN lang=EN-US>Struts</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是否已死Q?Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我认为现在就?/SPAN><SPAN lang=EN-US>Struts</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已死为时q早?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Struts</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个很好的温床Q在它之上g怺</SPAN><SPAN lang=EN-US>Struts Classic 1.3, Struts Shale, Struts Ti, Struts OverDrive</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">{等新老面孔的目?/SPAN><SPAN lang=EN-US>Struts</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">zd依旧Q!Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们来看?/SPAN><SPAN lang=EN-US>Struts</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已经或将要实现的新特色以及将来的发展势?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新特Ԍ</SPAN><SPAN lang=EN-US style="COLOR: blue"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>?SPAN style="mso-tab-count: 1">    </SPAN>POJO forms and actions </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>?SPAN style="mso-tab-count: 1">    </SPAN>HTTP independence </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>?SPAN style="mso-tab-count: 1">    </SPAN>UI Tags (explicit <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:City w:st="on"><st1:place w:st="on">AJAX</st1:place></st1:City> support using Dojo) </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>?SPAN style="mso-tab-count: 1">    </SPAN>Direct support for Action Chaining </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>?SPAN style="mso-tab-count: 1">    </SPAN>Continuations </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US>?SPAN style="mso-tab-count: 1">    </SPAN>Extensible response types </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="COLOR: blue; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">路线图:</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 lang=EN-US style="COLOR: red">Phase 1<o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Based on the WebWork 2.2 codebase </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Struts Action 1.x migration tools </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Commons Chain Integration</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US style="COLOR: red">Phase 2<o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Zero XML configuration </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Annotated stateful POJO Controllers </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>Dialog/Workflow Support from Beehive </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><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: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">看了上面q些Q是否觉?/SPAN><SPAN lang=EN-US>Struts</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">又会重新J荣h呢?</SPAN></P> <P> </P><img src ="http://www.tkk7.com/patrick/aggbug/26063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-30 15:14 <a href="http://www.tkk7.com/patrick/archive/2005/12/30/26063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic服务器性能调优http://www.tkk7.com/patrick/archive/2005/12/30/26056.html大狮子慢慢爬的Blog大狮子慢慢爬的BlogFri, 30 Dec 2005 06:44:00 GMThttp://www.tkk7.com/patrick/archive/2005/12/30/26056.htmlhttp://www.tkk7.com/patrick/comments/26056.htmlhttp://www.tkk7.com/patrick/archive/2005/12/30/26056.html#Feedback6http://www.tkk7.com/patrick/comments/commentRss/26056.htmlhttp://www.tkk7.com/patrick/services/trackbacks/26056.htmlWeblogic服务器性能调优

       注:在下面做的介l都是以Weblogic8.1Z的,其它版本?/SPAN>Weblogic可能会有些许不同?/SPAN>

       1) JAVA参数Q?/SPAN>

       a) ~辑Weblogic Server启动脚本文gQ?/SPAN>

l         BEA_HOME\user_projects\domains\domain-name\startWebLogic.cmd(startWebLogic.sh on Unix)

l         BEA_HOME\user_projects\domains\domain-name\startManagedWebLogic.cmd(startManagedWebLogic.sh on Unix)

b) ~辑set JAVA_OPTIONS命oQ如Q?/SPAN>set JAVA_OPTIONS=-Xms256m –Xmx256mQ?/SPAN>

c) 保存Q重启即可?/SPAN>

注:?/SPAN>WebLogic中,Z获得更好的性能Q?/SPAN>BEA公司推荐最?/SPAN>Java堆等于最?/SPAN>Java堆?/SPAN>

2) 开发模?/SPAN> vs. 产品模式Q?/SPAN>

开发模式和产品模式的一些参数的默认g同,可能会对性能造成影响Q下面是Ҏ(gu)能有媄响的参数列表Q?/SPAN>

参数

开发模式默认?/SPAN>

产品模式默认?/SPAN>

Execute Queue: Thread Count

15 threads

25 threads

JDBC Connection Pool: MaxCapacity

15 connnections

25 connections

       通过启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 配置 > 常规选择产品模式?/SPAN>

3) 量开启本?/SPAN>I/OQ?/SPAN>

通过启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 服务?/SPAN> > server实例Q如Q?/SPAN>myserverQ?/SPAN>> 配置 > 调整选择启用本地I/O?/SPAN>

注:此g可通过手动的修?/SPAN>config.xml配置文g?/SPAN>

4) 调优执行队列U程Q?/SPAN>

a) 修改默认执行U程?/SPAN>

在这里,执行队列的线E数表示执行队列能够同时执行的操作的数量。但此g是设的越大越好,应该恰到好处的去讄它,太小了,执行队列中将会积累很多待处理的Q务,太大了,则会消耗大量的pȝ资源从而媄响整体的性能。在产品模式下默认ؓ25个执行线E?/SPAN>

Z讄理想的执行队列的U程敎ͼ我们可以启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 服务?/SPAN> > server实例Q如Q?/SPAN>myserverQ?/SPAN>> 监视 > 性能中监控最大负载时执行队列的吞吐量和队列中的等待请求数Q据此确定理想的数倹{?/SPAN>

       理想的默认执行线E数是由多方面的因素军_的,比如机器CPU性能、M体系架构?/SPAN>I/O、操作系l的q程调度机制?/SPAN>JVM的线E调度机制。随着CPU个数的增加,WebLogic可以q乎U性地提高U程数。线E数多Q花费在U程切换的时间也p多;U程数越,CPU可能无法得到充分的利用。ؓ获取一个理想的U程敎ͼ需要经q反复的试。在试中,可以?/SPAN>25*CPU个数为基准进行调整。当I闲U程较少Q?/SPAN>CPU利用率较低时Q可以适当增加U程数的大小Q每五个递增Q。对?/SPAN>PC Server?/SPAN>Windows 2000Q则最好每?/SPAN>CPU50个线E,?/SPAN>CPU利用率ؓ90%左右为最佟?/SPAN>

       通过启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 服务?/SPAN> > server实例Q如Q?/SPAN>myserverQ?/SPAN>> Execute Queue > weblogic.kernel.Defalt > 配置中修改线E计数?/SPAN>

       b) 讑֮执行队列的溢出条Ӟ

       Weblogic Server提供l默认的执行队列或用戯定义的执行队列自定义溢出条g的功能,当满x溢出条gӞ服务器改变其状态ؓ“警告”状态,q且额外的再分配一些线E去处理在队列中的请求,而达到降低队列长度的目的?/SPAN>

       通过启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 服务?/SPAN> > server实例Q如Q?/SPAN>myserverQ?/SPAN>> Execute Queue > weblogic.kernel.Defalt > 配置下面几项Q?/SPAN>

l         队列长度Q此DC执行队列中可容U的最大请求数Q默认值是65536Q最后不要手动改变此倹{?/SPAN>

l         队列长度阈值百分比Q此DC溢出条Ӟ在此服务器指出队列溢Z前可以达到的队列长度大小的百分比?/SPAN>

l         U程数增加:当检到溢出条gӞ增加到执行队列中的U程数量。如?/SPAN>CPU和内存不是够的高,量不要改变默认值?/SPAN>0”。因?/SPAN>Weblogic一旦增加后不会自动~减Q虽然最l可能确实vC降低h的作用,但在来的运行中媄响程序的性能?/SPAN>

l         最大线E数Qؓ了防止创多的U程数量Q可以通过讑֮最大的U程数进行控制?/SPAN>

在实际的应用场景中,应根据具体情况适当的调整以上参数?/SPAN>

c) 讑֮执行队列监测行ؓ

Weblogic Server能够自动监测到当一个执行线E变为“阻塞”。变为“阻塞”状态的执行U程无法完成当前的工作Q也无法再执行新h。如果执行队列中的所有执行线E都变ؓ“阻塞”状态,Weblogic server可能改变状态ؓ“警告”或“严重”状态。如?/SPAN>Weblogic server变ؓ“严重”状态,可以通过Node Manager来自动关闭此服务器ƈ重新启动它。具体请参考:Node Manager Capabilities文档?/SPAN>

通过启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 服务?/SPAN> > server实例Q如Q?/SPAN>myserverQ?/SPAN>>配置 > 调整下可配置下面几项Q?/SPAN>

l         dU程最长时_在此服务器将U程诊断为阻塞线E之前,U程必须q箋工作的时间长?/SPAN>(U?/SPAN>)。默认情况下Q?/SPAN>WebLogic Server 认ؓU程在连l工?/SPAN> 600 U后成ؓdU程?/SPAN>

l         dU程计时器间隔:WebLogic Server 定期扫描U程以查看它们是否已l连l工作了 "dU程最长时?/SPAN>" 字段中指定的旉长度的间隔时?/SPAN>(U?/SPAN>)。默认情况下Q?/SPAN>WebLogic Server 此旉间隔讄?/SPAN> 600 U?/SPAN>

5) 调优TCPq接~存敎ͼ

WebLogic Server?/SPAN>Accept Backlog参数规定服务器向操作pȝh的队列大,默认gؓ50。当pȝ重蝲负荷?/SPAN>,q个值可能过?/SPAN>,日志中报Connection Refused,D有效q接h遭到拒绝,此时可以提高Accept Backlog 25%直到q接拒绝错误消失。对?/SPAN>Portalcd的应?/SPAN>,默认值往往是不够的?/SPAN>Login Timeout?/SPAN>SSL Login Timeout参数表示普通连接和SSLq接的超时时?/SPAN>,如果客户q接被服务器中断或?/SPAN>SSL定w?/SPAN>,可以试增加该倹{?/SPAN>

通过启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 服务?/SPAN> > server实例Q如Q?/SPAN>myserverQ?/SPAN>>配置 > 调整下可配置“接受预备连接”?/SPAN>

6) 改变Java~译器;

标准?/SPAN>Java~译器是javacQ但~译JSP servlets速度太慢Qؓ了提高编译速度Q可以?/SPAN>sj?/SPAN>jikes~译器取?/SPAN>javac~译器。下面说说更?/SPAN>Java~译器:

通过启动理控制収ͼ在域Q如Q?/SPAN>mydomainQ?/SPAN>> 服务?/SPAN> > server实例Q如Q?/SPAN>myserverQ?/SPAN>>配置 > 常规下改?/SPAN>Java ~译?/SPAN>Q默认ؓjavac。输入完整\径,如:c:\visualcafe31\bin\sj.exe。然后打开高选项Q在预规划到c\?/SPAN>填写~译 Java 代码时ؓ Java ~译器类路径预规划的选项Q如Q?/SPAN>BEA_HOME\jdk141_02\jre\lib\rt.jar?/SPAN>

7) 使用Webogic Server集群提高性能Q?/SPAN>

具体关于如何配置Weblogic集群Q我׃l说了。详情可参考:Introduction to WebLogic Server Clustering?/SPAN>

8) Weblogic EJB调优

׃EJB2.0已经很少目在用了,EJB3.0再成熟一点,我再补充q一部分吧!

9) JDBC应用调优

JDBC Connection Pool的调优受制于WebLogic ServerU程数的讄和数据库q程?/SPAN>,游标的大。通常我们在一个线E中使用一个连?/SPAN>,所以连接数q不是越多越?/SPAN>,为避免两边的资源消耗,讄q接池的最大值等于或者略于U程数。同时ؓ了减新接的开销,最值和最大DZ致?/SPAN>

增加Statement Cache Size对于大量使用PreparedStatement对象的应用程序很有帮?/SPAN>,WebLogic能够为每一个连接缓存这些对?/SPAN>,此值默认ؓ10。在保证数据库游标大够的前提?/SPAN>,可以Ҏ(gu)需要提?/SPAN>Statement Cache Size。比如当你设|连接数?/SPAN>25,Cache Size?/SPAN>10?/SPAN>,数据库可能需要打开25*10=250个游标。不q的?/SPAN>,当遇CPreparedStatement Cache有关的应用程序错误时,你需要将Cache Size讄?/SPAN>0?/SPAN>

JDBC Connection Pool提供了很多高U参?/SPAN>,在开发模式下比较有用,但大部分在生产环境下不需调整。这里徏议最好不要设|测试表, 同时Test Reserved Connections?/SPAN>Test Released Connections也无需勾上?/SPAN> 当然如果你的数据库不E_,时断时箋,你就可能需要上q的参数打开?/SPAN>

最后提一下驱动程序类型的选择,?/SPAN>OracleZ,Oracle提供thin驱动?/SPAN>oci驱动,从性能上来?/SPAN>,oci驱动Zthin驱动,特别是大数据量的操作。但在简单的数据库操作中,性能相差不大,随着thin驱动的不断改q?/SPAN>,q一弱势得到I补。?/SPAN>thin驱动的移植性明昑ּ?/SPAN>oci驱动。所以在通常情况下徏议?/SPAN>thin驱动。而最新驱动器׃WebLogic server/bin目录下的cd可能不是最新的,请以Oracle|站为准: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html?/SPAN>

10) JSP调优

l         jsp-param pageCheckSeconds=-1Q?/SPAN>

l         serlet-reload-check=-1?/SPAN>ServletReloadCheckSecs=-1Q?/SPAN>

l         jsp-param precompile=trueQ关?/SPAN>JSP预编译选项?/SPAN>



大狮子慢慢爬的Blog 2005-12-30 14:44 发表评论
]]>
操作pȝ调优http://www.tkk7.com/patrick/archive/2005/12/28/25697.html大狮子慢慢爬的Blog大狮子慢慢爬的BlogWed, 28 Dec 2005 04:53:00 GMThttp://www.tkk7.com/patrick/archive/2005/12/28/25697.htmlhttp://www.tkk7.com/patrick/comments/25697.htmlhttp://www.tkk7.com/patrick/archive/2005/12/28/25697.html#Feedback0http://www.tkk7.com/patrick/comments/commentRss/25697.htmlhttp://www.tkk7.com/patrick/services/trackbacks/25697.html阅读全文

大狮子慢慢爬的Blog 2005-12-28 12:53 发表评论
]]>
应用E序调优Q箋Q?/title><link>http://www.tkk7.com/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.tkk7.com/patrick/archive/2005/12/26/25478.html</guid><wfw:comment>http://www.tkk7.com/patrick/comments/25478.html</wfw:comment><comments>http://www.tkk7.com/patrick/archive/2005/12/26/25478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/patrick/comments/commentRss/25478.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/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>       </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">下面列出一些常见的关于字符串优化的{略Q简单的我就不多作解释了?/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">使用规则表达式处理字W串匚w代替复杂的字W串查找和复制操作;</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">使用不拷贝字W串中字W的高效Ҏ(gu)Q例?/SPAN><SPAN lang=EN-US><FONT face=Arial>String.subString()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Ҏ(gu)Q?/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">可能不要用需要拷贝字W串中字W的低效Ҏ(gu)Q例?/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">Q?/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">执行q接操作Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">q里特别一下,因ؓ我已l在|上看到好多文章都推荐?/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">Ҏ(gu)来做字符串的q接操作。其实在</SPAN><SPAN lang=EN-US><FONT face=Arial>JVM</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">能够在编译期p定l果的情形,使用</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">异常Q类型{换和变量</SPAN></SPAN></H2> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">考虑在抛出异常的时候是否可以不x生成堆栈信息而用一个已有的异常实例Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>       </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">创徏异常的开销很大。当创徏一个异常时Q需要收集一个栈跟踪Q?/SPAN><SPAN lang=EN-US><FONT face=Arial>Stack Trace</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q,q个栈跟t用于描q异常是在何处创建的。构些栈跟踪旉要ؓq行时栈做一份快照,正是q一部分开销很大。运行时栈不是ؓ有效的异常创设计的Q而是设计用来让运行时可能快地运行。入栈,出栈Q入栈,出栈。让q样的工作顺利完成,而没有Q何不必要的gq。但是,当需要创Z?/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">不得不说Q“先别动Q我惛_你现在的样子存一份快照,所以按时停止入栈和出栈操作Q笑着{我拍完快照吧。”栈跟踪不只包含q行时栈中的一两个元素Q而是包含q个栈中的每一个元素,从栈到栈底Q还有行号和一切应有的东西?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>       </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">因此Q创建异常这一部分开销很大。从技术上Ԍ栈跟t快照是在本地方?/SPAN><SPAN lang=EN-US><FONT face=Arial>Throwable.fillInStackTrace()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">中发生的Q这个方法不是从</SPAN><SPAN lang=EN-US><FONT face=Arial>Throwable contructor</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">那里调用的。但是这qƈ没有什么媄响——如果你创徏了一?/SPAN><SPAN lang=EN-US><FONT face=Arial>Exception</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q就得付Z仗好在捕获异常开销不大Q因此可以用</SPAN><SPAN lang=EN-US><FONT face=Arial>try-catch</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">核心内容包h。你也可以在Ҏ(gu)定义中定?/SPAN><SPAN lang=EN-US><FONT face=Arial>throws</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">子句Q这样对性能不会造成什么损失。从技术上Ԍ你甚臛_以随意地抛出异常Q而不用花费很大的代h(hun)。招致性能损失的ƈ不是</SPAN><SPAN lang=EN-US><FONT face=Arial>throw</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">操作——尽在没有预先创徏异常的情况下抛出异常是有点不寻常。真正要׃L是创建异常?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>       </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">q运的是Q好的编E习惯已教会我们Q不应该不管三七二十一抛出异常。异常是为异常的情况而设计的Q用时也应该牢记这一原则。但是,万一你不想遵从好的编E习惯,</SPAN><SPAN lang=EN-US><FONT face=Arial>Java</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">语言׃让你知道Q那样就可以让你的程序运行的更快Q从而鼓׃去那样做?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">       </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可能少的用强制类型{换方法,其是用类型特定的集合cLQ?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">优先于其他所有的数据cdQ?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>5) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可能用基本数据类型做临时变量Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">Q?/SPAN><SPAN lang=EN-US><FONT face=Arial>set</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Ҏ(gu)获取Q注意:q不W合面向对象的封装原则,不推荐用)?/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">循环Q选择和递归</SPAN></SPAN></H2> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>1) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在@环中消除不必要的代码Q做可能少的事情;</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>2) Switch</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">语句中用连l的</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">       </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">定是否真的需要用到递归Q最好{为用循环来实现?/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">       </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">q样的语句,而?/SPAN><SPAN lang=EN-US><FONT face=Arial>log4j</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">q样的日志工h换,以在E序正式上线的时候可以关闭所有不必要的日志操作提高性能Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">操作Ӟ考虑日志写入不同的文g做到q行化操作以提高性能Qƈ可以用一个后台线E执?/SPAN><SPAN lang=EN-US><FONT face=Arial>I/O</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">操作而不打断正常E序的执行;</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">正确的用序列化机制Q没有必要序列化的成员变量需要标识ؓ</SPAN><SPAN lang=EN-US><FONT face=Arial>transient</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">       </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">驱动Q尽可能地选择最新的</SPAN><SPAN lang=EN-US><FONT face=Arial>JDBC</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">驱动Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>       </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">驱动不仅优化了性能Q而且提供了更多的性能更好的接口供开发h员用?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>2) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用应用服务器自带的q接池,而不要用自qq接池或q脆不用q接池;</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>3) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在用完数据库资源后Q需依次关闭</SPAN><SPAN lang=EN-US><FONT face=Arial>ResultSet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/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">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>4) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">手动控制事务Q?/SPAN><SPAN lang=EN-US><FONT face=Arial>connection.setAutoCommit(false)</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">关闭自动提交Q?/SPAN><SPAN lang=EN-US><FONT face=Arial>executeBatch()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">q行扚w更新Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>5) </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">业务复杂或者大数据量操作时使用存储q程Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </SPAN>6) ResultSet.next()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">极其消耗性能Q徏议?/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">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">Q?/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">形式处理所有数据,数据库驱动程序不必再执行转换q程Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">语句Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">Q多?/SPAN><SPAN lang=EN-US><FONT face=Arial>index</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">获取字段Q而不要用名字去获取Q例?/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">Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">~存数据Q避免重复查询;</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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">q行扚w查询Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">数据cd和数据库cd相匹配,转换数据在匹配不好的数据cd间效率太差;</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'">  </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">调用Q尤其是</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">Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">查询减少数据库网l通信量;</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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"></SPAN><SPAN style="mso-spacerun: yes"><FONT face=Arial> </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">使用最低的事务隔离U别Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">       </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>       </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">应用服务器保存很多会话时Q容易造成内存不Q所以尽量减?/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">中的对象不应该是大对象,最好是单的对象,实现串行化接口。当会话不再需要时Q应当及时调?/SPAN><SPAN lang=EN-US><FONT face=Arial>invalidate()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Ҏ(gu)清除会话。而当某个变量不需要时Q及时调?/SPAN><SPAN lang=EN-US><FONT face=Arial>removeAttribute()</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Ҏ(gu)清除变量。当</SPAN><SPAN lang=EN-US><FONT face=Arial>session</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">l止旉要清除不必要的资源,实现</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">Ҏ(gu)?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">Q而不使用</SPAN><SPAN lang=EN-US><FONT face=Arial>include action</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><SPAN style="mso-tab-count: 1"><FONT face=Arial>       </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">面中引入外部资源的Ҏ(gu)主要有两U:</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">Q例?/SPAN><SPAN lang=EN-US><FONT face=Arial><%@ include file=”copyright.html?%></FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q该指o在编译时引入指定的资源。在~译之前Q带?/SPAN><SPAN lang=EN-US><FONT face=Arial>include</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">指o的页面和指定的资源被合ƈ成一个文件。被引用的资源在~译时就定Q比q行时才定资源更高效?/SPAN><SPAN lang=EN-US><FONT face=Arial>Include action</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q例?/SPAN><SPAN lang=EN-US><FONT face=Arial>< jsp:include page=”copyright.jsp?/></FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q该动作引入指定面执行后生成的l果。由于它在运行时完成Q因此对输出l果的控制更加灵zR但是,只有当引用的内容被频J改变时Q或者在对主面的请求没有出C前,被引用的面无法定Ӟ使用</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">       </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">Q关闭自动创建的会话可以节省一些资源。用如?/SPAN><SPAN lang=EN-US><FONT face=Arial>page</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">指oQ?/SPAN><SPAN lang=EN-US><FONT face=Arial> < %@ page session=”false?%></FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">面定义为单U程Q应讄?/SPAN><SPAN lang=EN-US><FONT face=Arial>< %@page isThreadSafe=”true?%></FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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>< %@page buffer=?2kb?%></FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">       </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">Q?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-tab-count: 1">       </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">Q</SPAN><SPAN lang=EN-US><FONT face=Arial>Servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">是线E安全的Q但是尽可能的减消耗在同步代码上的旉Q用够多?/SPAN><SPAN lang=EN-US><FONT face=Arial>servlet</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">d应用LhQ?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><FONT face=Arial><SPAN style="mso-spacerun: yes"> </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">Ҏ(gu)用于创徏和删除昂늚资源Q例如缓存对象和数据库连接;</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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">查找Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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">面Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </FONT></SPAN></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">可能的在客h校验数据Q?/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'">  </SPAN></SPAN></SPAN><SPAN lang=EN-US><SPAN style="mso-spacerun: yes"><FONT face=Arial> </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>       </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">再成熟一点,我再补充q一部分吧!</SPAN></P><img src ="http://www.tkk7.com/patrick/aggbug/25478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-26 18:28 <a href="http://www.tkk7.com/patrick/archive/2005/12/26/25478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用E序调优——对象创?/title><link>http://www.tkk7.com/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.tkk7.com/patrick/archive/2005/12/25/25348.html</guid><wfw:comment>http://www.tkk7.com/patrick/comments/25348.html</wfw:comment><comments>http://www.tkk7.com/patrick/archive/2005/12/25/25348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/patrick/comments/commentRss/25348.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/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">对象的创建是一个非常昂늚工作Q而由于对象的创徏而导致经常性的垃圾攉则是一个更加消耗时间和</SPAN><SPAN lang=EN-US><FONT face=Arial>CPU</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的操作。我们在~码Ӟ应当量的减对象的创徏。不要在l常被执行的代码中创建对象;使用集合对象时最好预先分配其大小Q当一?/SPAN><SPAN lang=EN-US><FONT face=Arial>class</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的多个实例都需要获取某个对象时Q最好能标记那个对象</SPAN><SPAN lang=EN-US><FONT face=Arial>static</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q当不需?/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'">      </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">中开发一个普遍性的对象池架构可以更好地利用资源Qƈ可以使对象创建的成本降到最。大多数人对直接或间接运用对象池来连接一个数据库都很熟?zhn)。但通常你也可以对象放入对象池中从而节省重要的资源、提高程序的效率q控制对不充源的讉K。出于对设计、成本或性能的考虑Q放入对象池中的对象通常是有限的。它们或者是初始化成本很高的对象Q或者是很少用的对象。运用对象池我们可以理竞争性客LҎ(gu)限的对象集的讉K?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象池主要是可以更好地运用你的资源。例如,设想有相当多的客戯有效q用很少的数据库q接或网l连接。通过限制对对象的讉KQ只在客L需要的时候才能访问对象)Q你可以释放资源,让其它客L使用。通过对象池提高对象的利用率通常可以提高pȝ的性能?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">你可以用对象池使初始化的成本达到最。典型的例子包括数据库、网l连接和U程。这Lq接通常需要很多时间来初始化。一旦创Zq些q接Q你可以重用它们,从而极大地节省了成本。因此,你可以将初始化成本很高(从时间、内存或其它资源斚w考虑Q的对象攑օ对象池中。例如,大多数容器都?/SPAN><SPAN lang=EN-US><FONT face=Arial>EJB</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">攑օ对象池中Q从而避免重复的资源分配和状态初始化?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">一个设计良好的对象池架构具有普遍性,它适合不同应用E序的需要。可以让你控制对象池的容量、对象填充策略和对象状态。它可以极大地提高你的应用程序的效率Q不从速度斚w考虑Q还是从资源利用率方面考虑Q该架构都可以提供这L好处?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">在这里,l大家推荐一个开源的目</SPAN><SPAN lang=EN-US><FONT face=Arial>Commons-Pool</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q?/SPAN><SPAN lang=EN-US><A ><FONT face=Arial>http://jakarta.apache.org/commons/pool/</FONT></A></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q,我还没来得及研究Q谁用过了,感觉好的Q麻烦告诉我一下,谢谢Q?/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'">      </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">使用此技术获取线E绑定的带状态的单例对象?/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'">      </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">来得对象的实例只能有一个ƈ被其他对象所׃n?/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'">      </SPAN></SPAN></SPAN><SPAN style="COLOR: blue; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">枚D帔R</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'">      </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">Q?/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">引用c?/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">引用cȝ主要功能是能够引用仍可以被垃圾攉器回收的对象。在引入引用cM前,我们只能使用强引用(</SPAN><SPAN lang=EN-US><FONT face=Arial>Strong Reference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q。例?/SPAN><SPAN lang=EN-US><FONT face=Arial>obj</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">q个引用引用堆中存储的一个对象,只要</SPAN><SPAN lang=EN-US><FONT face=Arial>obj</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用q存在,垃圾攉器就永远不会释放用来容纳该对象的存储I间。当</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">Ӟ垃圾攉器就认ؓ没有对这个对象的其他引用Q也可以收集它了。然而还需要注意一个重要的l节Q仅凭对象可以被攉q不意味着垃圾攉器的一ơ指定运行就能够回收它。由于各U垃圾收集算法不同,某些法会更频繁地分析生存期较短的对象,而不是较老、生存期较长的对象。因此,一个可供收集的对象可能永远也不会被回收。如果程序在垃圾攉器释攑֯象之前结束,q种情况可能会出现。因此,概括地说Q你永远无法保证可供攉的对象L会被垃圾攉器收集?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">让我们来看看一些术语和定义Q?/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">Q:可以通过强引用访问的对象?/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">Q:不是强可及对象,q且能够通过软引用访问的对象?/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">Q:不是强可及对象也不是软可及对象,q且能够通过弱引用访问的对象?/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">Q:不是强可及对象、Y可及对象Q也不是弱可及对象,已经l束的,可以通过虚引用访问的对象?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">清除Q将引用对象?/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">Qƈ引用类在堆中引用的对象声明为可l束的?/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">c:</SPAN><SPAN lang=EN-US><FONT face=Arial>SoftReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">cȝ一个典型用途就是用于内存敏感的高速缓存?/SPAN><SPAN lang=EN-US><FONT face=Arial>SoftReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的原理是Q在保持对对象的引用时保证在</SPAN><SPAN lang=EN-US><FONT face=Arial>JVM</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">报告内存不情况之前清楚所有的软引用。关键之处在于,垃圾攉器在q行时可能会Q也可能不会Q释放Y可及对象。对象是否被是否取决于垃圾收集器的算法以及垃圾收集器q行时可用的内存数量?/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">c:</SPAN><SPAN lang=EN-US><FONT face=Arial>WeakReference</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">cȝ一个典型用途就是规范化映射Q?/SPAN><SPAN lang=EN-US><FONT face=Arial>Canonicalized Mapping</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">Q。另外,对于那些生存期相对较长而且重新创徏的开销也不高的对象来说Q弱引用也比较有用。关键之处在于,垃圾攉器运行时如果到了弱可及对象Q将释放</SPAN><SPAN lang=EN-US><FONT face=Arial> WeakReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用的对象。然而,h意,垃圾攉器可能要q行多次才能扑ֈq攑ּ可及对象?/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">c:</SPAN><SPAN lang=EN-US><FONT face=Arial>PhantomReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">cd能用于跟t对被引用对象即进行的攉。同P它还能用于执?/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">cM起用。需?/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">对象p攑֜它的</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">上也是一个通知Q表?/SPAN><SPAN lang=EN-US><FONT face=Arial> PhantomReference </FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">对象引用的对象已l结束,可供攉了。这使?zhn)能够刚好在对象占用的内存被回收之前采取行动?/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">在某些场合引用类q是很有用的Q具体可以参考文?/SPAN><SPAN lang=EN-US><FONT face=Arial>Java2</FONT></SPAN><SPAN style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">引用cM用指南(</SPAN><SPAN lang=EN-US><A ><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">Q?/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'">      </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">来做q接操作{等?/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'">      </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">通过提前创徏对象或gq到使用时再创徏对象Q来做到性能优化和避免创多的对象?/SPAN></P><img src ="http://www.tkk7.com/patrick/aggbug/25348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-25 09:40 <a href="http://www.tkk7.com/patrick/archive/2005/12/25/25348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天温习了一遍《谈谈情Q蟩跌?/title><link>http://www.tkk7.com/patrick/archive/2005/12/22/25135.html</link><dc:creator>大狮子慢慢爬的Blog</dc:creator><author>大狮子慢慢爬的Blog</author><pubDate>Thu, 22 Dec 2005 14:40:00 GMT</pubDate><guid>http://www.tkk7.com/patrick/archive/2005/12/22/25135.html</guid><wfw:comment>http://www.tkk7.com/patrick/comments/25135.html</wfw:comment><comments>http://www.tkk7.com/patrick/archive/2005/12/22/25135.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/patrick/comments/commentRss/25135.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/patrick/services/trackbacks/25135.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今天重温了一遍《谈谈情Q蟩跌》,q不错,珍妮?/SPAN><SPAN lang=EN-US>·</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">z佩兹和理查</SPAN><SPAN lang=EN-US>·</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基尔的优的舞姿是此片的一大看炏V?BR>    很不明白Qؓ什么事业有成,家庭满的的他还是会失意Q还是会寂寞Q甚臛_能背叛自q丽贤惠的d。看了好多反映中q危机的qQ唉Qh是一U很奇怪的动物Q会失意Q会寂寞Q会厌倦,会开心,会失败可能也会成功,得不到的永远是最好的Q得C却不知道珍惜Q失M才后(zhn)莫及。不知道再过十年的我会成什么样子,也许也会加入他们的行列,呵呵~~~<BR>    </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">摘录一些此片的l典台词Q学学英语,感?zhn)感(zhn)人生q是很不错的?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>To catch a husband is an art, to hold him is a job.</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">扑ֈ一个丈夫是门艺术,留住他是工E?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><?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 lang=EN-US>The mass of men lead live of quiet desperation, Maybe the desperation cat't be quiet anymore</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">男h在沉默的l望中生z,也许q绝望不惛_保持沉默了?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><o:p> </o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US>The one thing I am proudest of in my whole life,,, is that you are happy with me If I couldn't,,, if I couldn't tell you that I was unhappy sometimes, it was because I didn't want to risk hurting the one person I treasure most.</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我一生中最骄傲的事情是你和我在一起很快乐如果我不能告诉你我有些时候不快乐是因为我不愿伤害我最珍视的h?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN lang=EN-US><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: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外Q此片的几首英文歌曲q是很不错的Q在|上搜烦了一下,发现有电(sh)驴版的原声大?/SPAN><SPAN lang=EN-US>Shall we dance</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">》,可是不知道我的破?sh)驴怎么׃好用。只好作|!以后有空再好好找扑֐Q?/SPAN></P> <P> </P><img src ="http://www.tkk7.com/patrick/aggbug/25135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/patrick/" target="_blank">大狮子慢慢爬的Blog</a> 2005-12-22 22:40 <a href="http://www.tkk7.com/patrick/archive/2005/12/22/25135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>性能调优的基本知识和JDK调优http://www.tkk7.com/patrick/archive/2005/12/22/25117.html大狮子慢慢爬的Blog大狮子慢慢爬的BlogThu, 22 Dec 2005 11:28:00 GMThttp://www.tkk7.com/patrick/archive/2005/12/22/25117.htmlhttp://www.tkk7.com/patrick/comments/25117.htmlhttp://www.tkk7.com/patrick/archive/2005/12/22/25117.html#Feedback31http://www.tkk7.com/patrick/comments/commentRss/25117.htmlhttp://www.tkk7.com/patrick/services/trackbacks/25117.html 

基本知识

1.1 性能是什?/SPAN>

在性能调优之前Q我们首先来了解一下性能是什么?关于性能Q我x个学习过Java的h都能列出几点Q甚臛_以夸夸其谈。在?/SPAN>Java TM Platform Performance》(注:我有此书的电(sh)子版Q有需要者可以和我联p?/SPAN>Q一书中Q定义了如下五个斚w来作判性能的标准:

1)      q算的性能——哪一个算法的执行性能最好?

2)      内存的分配——程序运行时需要耗费多少内存Q?/SPAN>

3)      启动的时间——程序启动需要多长时_q在Web目中的影响不大Q但要注意部分程序需要部|或q行在客L时的情ŞQ比?/SPAN>appletE序Q?/SPAN>

4)      E序的可伸羃性——在压力负蝲的情况下Q程序的性能如何Q?/SPAN>

5)      性能的感知——用户在什么情况下会觉得程序的性能不好Q?/SPAN>

以上五个斚wQ在具体的用场景可以有选择的去评判。至于这五方面的性能调优Q在后箋的章节中会陆箋的给以相应的性能调优{略?/SPAN>

1.2 调优的规?/SPAN>

我们只需要关心对我们E序有媄响,可以察觉到的性能问题Q而不是每一个类中的每一个方法我们都需要想方设法的提高性能。如果程序的性能没有辑ֈ我们所期望的要求,我们才需要考虑如何优化性能。同LQ晦涩的代码虽然提高了程序的性能Q但同时可能带给我们的是l护的噩梦。我们需要折中的考虑以上两种情况Q得程序的代码是优的Qƈ且运行的_快,辑ֈ客户所期望的性能要求?/SPAN>

优化代码甚至会导致不良的l果Q?/SPAN>Donald KnuthQ一位比较牛比较有媄响的人物Q具体是谁,我也忘了Q谁知道Q可以告诉我一下,谢谢Q)曾说q,?/SPAN>Premature optimization is the root of all evil?/FONT>。在开始性能调优前,需要先指出不优化代码的一些理由?/SPAN>

1)      如果优化的代码已l正常工作,优化后可能会引入新的bugQ?/SPAN>

2)      优化代码向于代码更难理解和维护;

3)      在一个^C优化的代码,在另一个^C可能更糟Q?/SPAN>

4)      p很多旉在代码的优化上,提高了很的性能Q却D了晦涩的代码?/SPAN>

实Q在优化前,我们必须认真的考虑是否值得M化?/SPAN>

1.3 调优的步?/SPAN>

一般我们提高应用程序的性能划分Z下几个步骤:

1)      明确应用E序的性能指标Q怎样才符合期望的性能需求;

2)      在目标^台进行测试;

3)      如果性能已经辑ֈ性能指标Q?/SPAN>StopQ?/SPAN>

4)      查找性能瓉Q?/SPAN>

5)      修改性能瓉Q?/SPAN>

6)      q回到第2步?/SPAN>

?/SPAN> JDK调优

2.1 选择合适的JDK版本

不同版本?/SPAN>JDKQ甚至不同厂家的JDK可能都存在着很大的差异,对于性能优化的程度不同。一般来_可能选择最新发布的E_?/SPAN>JDK版本。最新的E_?/SPAN>JDK版本相对以前?/SPAN>JDK版本都会做一?/SPAN>bug的修改和性能的优化工作?/SPAN>

2.2 垃圾攉Java堆的优化

垃圾攉是自动释放不再被程序所使用的对象的q程。当一个对象不再被E序所引用Ӟ它所引用的堆I间可以被回Ӟ以便被后l的新对象所使用。垃圾收集器必须能够断定哪些对象是不再被引用的,q且能够把它们所占据的堆I间释放出来。如果对象不再被使用Q但q有被程序所引用Q这时是不能被垃圾收集器所回收的,此时是所谓的“内存泄漏”。监控应用程序是否发生了内存泄漏Q有一个非怼U的监控工h荐给大家—?/SPAN>Quest公司?/SPAN>JProbe工具Q用它来观察程序运行期的内存变化,q可产生内存快照Q从而分析ƈ定位内存泄漏的确切位|,可以_定位到源码内。这个工L使用我在后箋的章节中q会做具体介l?/SPAN>

Java堆是指在E序q行时分配给对象生存的空间。通过-mx/-Xmx?/SPAN>-ms/-Xms来设|v始堆的大和最大堆的大。根据自?/SPAN>JDK的版本和厂家军_使用-mx?/SPAN>-ms?/SPAN>-Xmx?/SPAN>-Xms?/SPAN>Java堆大决定了垃圾回收的频度和速度Q?/SPAN>Java堆越大,垃圾回收的频度越低,速度慢。同理,Java堆越,垃圾回收的频度越高,速度快。要惌|比较理想的参数Q还是需要了解一些基知识的?/SPAN>

Java堆的最大g能太大,q样会造成pȝ内存被频J的交换和分c所以最大内存必M于物理内存减d他应用程序和q程需要的内存。而且堆设|的太大Q造成垃圾回收的时间过长,q样得不偿失,极大的媄响程序的性能。以下是一些经怋用的参数讄Q?/SPAN>

1)      -Xms{于-XmX的|

2)      估计内存中存zd象所占的I间的大,讄-Xms{于此|-Xmx四倍于此|

3)      -Xms{于-Xmx?/SPAN>1/2大小Q?/SPAN>

4)      -Xms介于-Xmx?/SPAN>1/10?/SPAN>1/4之间Q?/SPAN>

5)      使用默认的设|?/SPAN>

大家需要根据自qq行E序的具体用场景,来确定最适合自己的参数设|?/SPAN>

除了-Xms?/SPAN>-Xmx两个最重要的参数外Q还有很多可能会用到的参敎ͼq些参数通常强烈的依赖于垃圾攉的算法,所以可能因?/SPAN>JDK的版本和厂家而有所不同。但q些参数一般在Web开发中用的比较?yu),我就不做详细介绍了。在实际的应用中注意讄-Xms?/SPAN>-Xmx使其可能的优化应用E序p了。对于性能要求很高的程序,需要自己再多研I研I?/SPAN>Java虚拟机和垃圾攉法的机制了。可以看看曹晓钢译的《深?/SPAN>Java虚拟机》一书?/SPAN>

 



]]>
վ֩ģ壺 | ޹һҳwww| δav| ѹۿƵ| ްɫɫ߲| ŷƷպһҹҹ| ԴԴѹۿ| þþѹ۳ӰԺ| AV˾Ʒպ| ޹Ʒxo߹ۿ| þ޴ɫĻþþ| Ļר| ëƬѹۿ| ҰһƵ| av| ŷպƷһ| þþþ?V| ѹۿƬëƬ| һŮ18ëƬ| ҴýһAV| ۺϾƷһҳ| һ| ޹պa߲| ɫ͵͵ۺav78| ۺһ뾫Ʒ| պһĺ| պĻһ| ޶ۺϾþ| Ʒ޾Ʒˬˬ| ˽һ | av޹av| AV߹ۿ| ޾ƷһۺϾԴ | þɫWWWŷ| йŮר| ַ߹ۿ| AVŮ18ëƬˮ| պٸѲ| ޢva| ͼƬһ| Ļһ|