<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8665763284561318907</id><updated>2011-08-04T06:35:48.940+05:30</updated><category term='request.getheader'/><category term='JNDI configuration'/><category term='Configure Web Logs in Apache'/><category term='MySQL Query Profiler'/><category term='mysql functions'/><category term='XSD'/><category term='CVS connection'/><category term='connection pooling'/><category term='what is web2.0'/><category term='https in weblogic'/><category term='configure CVS'/><category term='Date and Time Functions'/><category term='Web stats- Urchin'/><category term='jmaki'/><category term='getheaders'/><category term='Generation'/><category term='weblogic configuration'/><category term='Online Sitemap Generator'/><category term='mobile simulator'/><category term='donnet'/><category term='Problem in removing elements from a collection using For-Loop'/><category term='GOOGLEBOT'/><category term='c#'/><category term='SSL Configuration'/><category term='ssl in weblogic'/><category term='java el'/><category term='hibernate dielect example'/><category term='opera mini in system'/><category term='weblogic7.0 ssl'/><category term='Apache Module mod_log_config'/><category term='Latin-1 Entities'/><category term='web stats'/><category term='SSL Process'/><category term='50 Essential Strategies For Creating A Successful Web 2.0 Product'/><category term='popup windows'/><category term='SSL'/><category term='Web site security–Authentication Hacking Attacks'/><category term='how to create Index in database'/><category term='el validations'/><category term='pooling'/><category term='java Portlets for Web Sites portlets'/><category term='online converter'/><category term='objects in java'/><category term='java'/><category term='Javascript'/><category term='XSD validation in Javascript'/><category term='java pooling'/><category term='JSTL examples'/><category term='JSTL'/><category term='Web site security–SQL Injection'/><category term='window.open method javascript'/><category term='robots'/><category term='Javascript Time functions'/><category term='Simple JavaScript Clock'/><category term='Web site security–Ajax security'/><category term='Special Charactors'/><category term='el examples'/><category term='Profiling Perl'/><category term='ascii  codes'/><category term='JavaFX'/><category term='date functions in sql'/><category term='Replace new Lines'/><category term='Special Entities'/><category term='Entities for Symbols and Greek Letters -- Special Characters'/><category term='Web site security–Google hacking'/><category term='html'/><category term='Web Site Optimization: 13 Simple Steps'/><category term='Jboss'/><category term='TOMCAT 5.0 ssl'/><category term='clover.ETL'/><category term='aspdotnet'/><category term='Error page in java'/><category term='MEta'/><title type='text'>New Technologies in Web Development</title><subtitle type='html'>Here are some of the new technologies in web development.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default?start-index=101&amp;max-results=100'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>136</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-5131458114737807791</id><published>2010-01-10T08:36:00.000+05:30</published><updated>2010-01-10T08:37:05.560+05:30</updated><title type='text'>Pixy-Open-Source Vulnerability Scanner for PHP Applications</title><content type='html'>&lt;div class=Section1&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;An Open-Source Vulnerability Scanner for PHP Applications. The Secure Systems Lab at the Technical University of Vienna has released the newest version of Pixy, an open-source vulnerability scanner. Here are some of the highlights: * Detection of SQL injection and XSS vulnerabilities in PHP source code &lt;span style='color:#1F497D'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1'&gt;&lt;![if !supportLists]&gt;&lt;span style='color:#1F497D'&gt;&lt;span style='mso-list:Ignore'&gt;1.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Automatic resolution of file inclusions &lt;span style='color:#1F497D'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1'&gt;&lt;![if !supportLists]&gt;&lt;span style='color:#1F497D'&gt;&lt;span style='mso-list:Ignore'&gt;2.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Computation of dependence graphs that help you understand the causes of reported vulnerabilities &lt;span style='color:#1F497D'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1'&gt;&lt;![if !supportLists]&gt;&lt;span style='color:#1F497D'&gt;&lt;span style='mso-list:Ignore'&gt;3.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Static analysis engine (flow-sensitive, interprocedural, context-sensitive) &lt;span style='color:#1F497D'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style='margin-left:.5in;text-indent:-.25in;mso-list:l1 level1 lfo1'&gt;&lt;![if !supportLists]&gt;&lt;span style='mso-list:Ignore'&gt;4.&lt;span style='font:7.0pt "Times New Roman"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;![endif]&gt;Platform-independent written in Java.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://pixybox.seclab.tuwien.ac.at"&gt;http://pixybox.seclab.tuwien.ac.at&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;b&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-5131458114737807791?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/5131458114737807791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=5131458114737807791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5131458114737807791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5131458114737807791'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2010/01/pixy-open-source-vulnerability-scanner.html' title='Pixy-Open-Source Vulnerability Scanner for PHP Applications'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-2115623454309602529</id><published>2009-08-13T08:19:00.001+05:30</published><updated>2009-08-13T08:19:58.207+05:30</updated><title type='text'>How Can One Benefit From A Large Twitter Following?</title><content type='html'>&lt;!-- Converted from text/rtf format --&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;Some of Twitter's 12.8 million active users will benefit handsomely for building a larger Follower's list, while other people will not.&lt;BR&gt; &lt;BR&gt; It is pointed out by&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;A HREF="http://twitter.com/web2marketer/status/2939696759"&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;FONT COLOR="#0000FF" SIZE=2 FACE="Arial"&gt;@web2marketer&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;, &amp;quot;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;I&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;I&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;I&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;It's not about how many Twitter followers you have...the only thing that matters is - are they listening?&lt;/FONT&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;&amp;quot;&lt;BR&gt; &lt;BR&gt; This is the key, of course.&lt;BR&gt; &lt;BR&gt; Some people build huge lists of Followers, but don't say anything worthwhile or interesting. Some are only interested in building their Followers list for the sake of building Followers.&lt;BR&gt; &lt;BR&gt; If no one wants to listen to what you have to say, it does not matter whether you have 1 Follower or 2.9 million Followers. If no one is &amp;quot;listening&amp;quot; to what you have to say, you will not make any money from your participation in Twitter.&lt;BR&gt; &lt;BR&gt; On the other hand, if people are &amp;quot;listening&amp;quot; to what you have to say and &amp;quot;clicking&amp;quot; the links you tell them to click, then you have a good chance of earning real money as a result of your Twitter activities.&lt;BR&gt; &lt;BR&gt; It has been said that the consumer needs to see or hear your name or your marketing message 7 times, before they will trust you enough to buy from you. Professionals in the direct marketíng industry suggest that 82% of all consumers (business people or otherwise) will buy your products or services on the second to the ninth exposure to your marketing message.&lt;BR&gt; &lt;BR&gt; Twitter allows you to carry a continuous dialog with those most likely to buy what you are selling - through the Public Timeline of the people following you in Twitter. Once people have started to pay attention to what you tell them, and once they start absorbing your marketing message, then gaining your Followers trust is made easier. Once people are listening to you, you can earn their trust fairly quickly.&lt;BR&gt; &lt;BR&gt; An idea presented by @contentmanager is that television has had 80+ years to perfect its advertising model. Television seems committed to the concept of 42 minutes of content to anchor 18 minutes of advertising. These numbers translate into&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;A HREF="http://twitter.com/contentmanager/status/3106295397"&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;FONT COLOR="#0000FF" SIZE=2 FACE="Arial"&gt;70% content to provide an anchor for its 30% advertising&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;. In context, he says that the 70% content is designed to attract attention and win trust, and then the 30% advertising is designed to earn profíts and cover the costs of building content.&lt;BR&gt; &lt;BR&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;B&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;B&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;B&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;Understand That It Is A Numbers Game&lt;/FONT&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;BR&gt; &lt;BR&gt; &lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;As a successful Twitter marketer, your first goal is always to attract Followers (an audience). Your second goal is to win the trust of your Followers (your viewing audience). Only after you have earned the trust of your Followers should you endeavor to advertise to your Twitter Followers list (to earn revenue). If you have earned the trust of your Twitter Followers, revenue is certain to follow.&lt;BR&gt; &lt;BR&gt; But, as with anything in business, it is a numbers game. A certain percentage of the number of people exposed to your Twitter profile will become Followers. A certain percentage of those people following you, will actually read what you have to say. A certain percentage of those people will click your links. And if that link leads to a page where you can earn revenue, only a certain percentage of people will buy your pitch.&lt;BR&gt; &lt;BR&gt; For most people, the only certainty is that they need to grow their audience, and in the case of the Twitter community, they need to grow their list of Twitter Followers. In the numbers game, if you can build up your audience, you can boost your revenue. It is as simple as that.&lt;BR&gt; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-2115623454309602529?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/2115623454309602529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=2115623454309602529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/2115623454309602529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/2115623454309602529'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/08/how-can-one-benefit-from-large-twitter.html' title='How Can One Benefit From A Large Twitter Following?'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-6109737811963961160</id><published>2009-08-13T08:18:00.001+05:30</published><updated>2009-08-13T08:18:37.824+05:30</updated><title type='text'>Understanding The Value Of The Twitter Community</title><content type='html'>&lt;!-- Converted from text/rtf format --&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;In March of 2008, Twitter was estimated to have one million active users, according to&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;A HREF="http://bit.ly/RICvf"&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;FONT COLOR="#0000FF" SIZE=2 FACE="Arial"&gt;Michael Arrington of TechCrunch&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;. But amazingly, over the course of the following year, Twitter was able to expand its user base by 32-37 times, according to which news source you trust for your data.&lt;BR&gt; &lt;BR&gt; On July 30th 2009, the&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;A HREF="http://bit.ly/dhAIE"&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;FONT COLOR="#0000FF" SIZE=2 FACE="Arial"&gt;Philadelphia Enquirer&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt; reported that Twitter had &amp;quot;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;I&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;increased its user base by 37-fold to more than 32 million users worldwide, 18-20 million of whom reside in the United States&lt;/FONT&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;&amp;quot;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;Now, the naysayers are fond of pointing out that Twitter's attrition rate is quite large, with 60% of new users disappearing after signing up for the service. But if the Philadelphia Enquirer's estimation is correct that &amp;quot;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;I&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;I&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;I&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;only 40 percent of first-timers become habitual visitors&lt;/FONT&gt;&lt;/I&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt;&amp;quot;, then the remaining 12.8 million users still make a viable and vibrant Twitter community.&lt;BR&gt; &lt;BR&gt; Each individual user inside the Twitter community is capable of building his or her own community of Followers.&lt;BR&gt; &lt;BR&gt; As Ashton Kutcher has taught us, building a Follower list is fairly straight forward - when people are interested in you and what you have to say, they will follow you on Twitter to see what you have to say.&lt;BR&gt; &lt;BR&gt; To date, nearly 3 million Twitter users have decided that they care enough about Kutcher's life to follow his personal tweets. Of course, I am sure it helps that he occasionally&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;A HREF="http://twitter.com/aplusk/status/1366791709"&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;FONT COLOR="#0000FF" SIZE=2 FACE="Arial"&gt;posts pictures&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#222222" SIZE=2 FACE="Arial"&gt; of his wife, Demi Moore, in his tweets. Not only did Kutcher share a shot of his Demi's derriere, he also proved that rich people have ugly furniture too.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-6109737811963961160?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/6109737811963961160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=6109737811963961160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/6109737811963961160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/6109737811963961160'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/08/understanding-value-of-twitter.html' title='Understanding The Value Of The Twitter Community'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-8677355582789025692</id><published>2009-08-13T08:15:00.000+05:30</published><updated>2009-08-13T08:16:09.019+05:30</updated><title type='text'>How to Build a Profitable Twitter Profile</title><content type='html'>&lt;div class=Section1&gt;  &lt;p style='margin-right:7.5pt'&gt;&lt;span style='font-family:"Arial","sans-serif"; color:#222222'&gt;Twitter is one of the fastest growing marketplaces on the Internet. The reason why so many people like Twitter is because it is actually the perfect communication tool for people who don't understand and don't want to learn about Internet technology and the technological geek-speak that goes along with it.&lt;br&gt; &lt;br&gt; A few years back, I asked someone for his dad's email address. The son replied telling me that you just email his name. The son was clueless that there was an actual email address behind the shortcut for his dad's name. He did not understand email, and he did not care that he did not understand it. He was able to use it in a manner that was easy for him, and that is all that really mattered.&lt;br&gt; &lt;br&gt; What makes Twitter so popular to the masses is that one does not have to be tech-savvy to use the service. The new user simply needs to locate the profile of the person he or she wants to follow, and then the user simply clicks &amp;quot;Follow&amp;quot;. From that day forward, anytime the person &amp;quot;Followed&amp;quot; posts (tweets) new information to his or her micro-blog, Followers will be notified about the message in the Twitter Timeline. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='color:#222222'&gt;The only thing that is really difficult about Twitter is that new people seldom understand that they must &amp;quot;&lt;b&gt;Follow&lt;/b&gt;&amp;quot; someone, before they start to receive messages from others. But once someone has chosen to follow a few people, they get the idea behind Twitter very quickly.&lt;br&gt; &lt;br&gt; &lt;/span&gt;&lt;span style='font-size:9.0pt;color:#222222'&gt;With its' system of 140 character micro-posts (referred to as &amp;quot;&lt;b&gt;tweets&lt;/b&gt;&amp;quot;), users are able to communicate information to other users. Sometimes the tweeted info is a random comment, but often the tweets mean something to somebody.&lt;br&gt; &lt;br&gt; For the average consumer, they can log into Twitter to update grandma about the lives of the grandchildren and to provide links to family pictures.&lt;br&gt; &lt;br&gt; Although the service has been available since 2006, the Internet marketing community was really slow to catch on to the value of the Twitter community. Most Internet marketers hadn't heard of Twitter until 2008. Even then, online marketers were slow to see any real value in the platform. But in 2009, Twitter finally hit its stride in getting the word out about its service, in large part due to the Ashton Kutcher vs. CNN Twitter Follower Challenge.&lt;br&gt; &lt;br&gt; Ashton Kutcher (@aplusk) challenged CNN (@cnnbrk) to a race to one million Twitter Followers. On April 17th, 2009, Ashton became the first Twitter user to reach one million followers. CNN passed the mark a few hours later, but Ashton won the race fair and square.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-8677355582789025692?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/8677355582789025692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=8677355582789025692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/8677355582789025692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/8677355582789025692'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/08/how-to-build-profitable-twitter-profile.html' title='How to Build a Profitable Twitter Profile'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-1631510150442835580</id><published>2009-08-13T08:04:00.001+05:30</published><updated>2009-08-13T08:04:26.179+05:30</updated><title type='text'>Uploading Files with a Multipart POST</title><content type='html'>&lt;div class=Section1&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:18.0pt;font-family:"Times New Roman","serif"'&gt;Uploading Files with a Multipart POST &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;a name=d0e29570&gt;&lt;/a&gt;&lt;b&gt;&lt;span lang=EN style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;11.9.1.&amp;nbsp;Problem &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;You need to upload a file or a&lt;a name=http-webdav-ITERM-3269&gt;&lt;/a&gt; &lt;a name=http-webdav-ITERM-3270&gt;&lt;/a&gt;set of files with an HTTP multipart POST. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;a name=d0e29585&gt;&lt;/a&gt;&lt;b&gt;&lt;span lang=EN style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;11.9.2.&amp;nbsp;Solution &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Create a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;MultipartPostMethod&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; and add &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;File&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; objects as parameters using &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family: "Courier New"'&gt;addParameter( )&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt; font-family:"Times New Roman","serif"'&gt; and &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;addPart( )&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;. The &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;MultipartPostMethod&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; &lt;a name=http-webdav-ITERM-3271&gt;&lt;/a&gt;creates a request with a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Type&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; header of &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;multipart/form-data&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;, and each part is separated by a boundary. The following example sends two files in an HTTP multipart POST: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;a name="I_11_tt451"&gt;&lt;/a&gt;&lt;span lang=EN style='font-size: 10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;import org.apache.commons.httpclient.HttpClient;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;import org.apache.commons.httpclient.HttpException;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;import org.apache.commons.httpclient.methods.MultipartPostMethod;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;import org.apache.commons.httpclient.methods.multipart.FilePart;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;HttpClient client = new HttpClient( );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;// Create POST method&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;String weblintURL = &amp;quot;http://ats.nist.gov/cgi-bin/cgi.tcl/echo.cgi&amp;quot;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;MultipartPostMethod method = &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new MultipartPostMethod( weblintURL );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;File file = new File( &amp;quot;data&amp;quot;, &amp;quot;test.txt&amp;quot; );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;File file2 = new File( &amp;quot;data&amp;quot;, &amp;quot;sample.txt&amp;quot; );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method.addParameter(&amp;quot;test.txt&amp;quot;, file );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; method.addPart( new FilePart( &amp;quot;sample.txt&amp;quot;, file2, &amp;quot;text/plain&amp;quot;, &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;quot;ISO-8859-1&amp;quot; ) ); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;// Execute and print response&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;client.executeMethod( method );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;String response = method.getResponseBodyAsString( );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;System.out.println( response );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;method.releaseConnection( );&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Two &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;File&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; objects are added to the &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;MultipartPostMethod&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; using two different methods. The first method, &lt;/span&gt;&lt;span lang=EN style='font-size: 10.0pt;font-family:"Courier New"'&gt;addParameter( )&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;, adds a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;File&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; object and sets the file name to &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt; font-family:"Courier New"'&gt;test.txt&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt; font-family:"Times New Roman","serif"'&gt;. The second method, &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;addPart()&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;, adds a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;FilePart&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; object to the &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;MultipartPostMethod&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;. Both files are sent in the request separated by a part boundary, and the script echoes the location and type of both files on the server: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;a name="I_11_tt452"&gt;&lt;/a&gt;&lt;span lang=EN style='font-size: 10.0pt;font-family:"Courier New"'&gt;&amp;lt;h3&amp;gt;Form input&amp;lt;/h3&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;lt;pre&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;sample.txt = /tmp/CGI14480.4 sample.txt {text/plain; charset=ISO-8859-1}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;test.txt = /tmp/CGI14480.2 test.txt {application/octet-stream; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;charset=ISO-8859-1}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;&amp;lt;/pre&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;a name=d0e29645&gt;&lt;/a&gt;&lt;b&gt;&lt;span lang=EN style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;11.9.3.&amp;nbsp;Discussion &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Adding a part as a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;FilePart&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; &lt;a name=http-webdav-ITERM-3272&gt;&lt;/a&gt;&lt;a name=http-webdav-ITERM-3273&gt;&lt;/a&gt;&lt;a name=http-webdav-ITERM-3274&gt;&lt;/a&gt;object allows you to specify the &lt;a name=http-webdav-ITERM-3275&gt;&lt;/a&gt;&lt;a name=http-webdav-ITERM-3276&gt;&lt;/a&gt;Multipurpose Internet Main Extensions (MIME) type and the character set of the part. In this example, the &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;sample.txt&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; file is added with a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;text/plain&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; MIME type and an &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;ISO-8859-1&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; character set. If a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family: "Courier New"'&gt;File&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family: "Times New Roman","serif"'&gt; is added to the method using &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;addParameter( )&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; or &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;setParameter( )&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;, it is sent with the default &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family: "Courier New"'&gt;application/octet-stream&lt;/span&gt;&lt;span lang=EN style='font-size: 12.0pt;font-family:"Times New Roman","serif"'&gt; type and the default &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;ISO-8859-1&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; character set. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;When &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;HttpClient&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; executes the &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;MultipartPostMethod&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; created in the previous example, the following request is sent to the server. The &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Type&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; header is &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;multipart/form-data&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;, and an arbitrary &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;boundary&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; is created to delineate multiple parts being sent in the request: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;a name="I_11_tt453"&gt;&lt;/a&gt;&lt;span lang=EN style='font-size: 10.0pt;font-family:"Courier New"'&gt;POST /cgi-bin/cgi.tcl/echo.cgi HTTP/1.1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;User-Agent: Jakarta Commons-HttpClient/3.0final&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Host: ats.nist.gov&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Length: 498&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Type: multipart/form-data; boundary=----------------31415926535&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;8979323846&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;------------------314159265358979323846&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Disposition: form-data; name=test.txt; filename=test.txt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Type: application/octet-stream; charset=ISO-8859-1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Transfer-Encoding: binary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;This is a test.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;------------------314159265358979323846&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Disposition: form-data; name=sample.txt; filename=sample.txt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Type: text/plain; charset=ISO-8859-1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Transfer-Encoding: binary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;This is a sample&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;------------------314159265358979323846--&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Each part contains a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family:"Courier New"'&gt;Content-Disposition&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; header to name the part and a &lt;/span&gt;&lt;span lang=EN style='font-size:10.0pt;font-family: "Courier New"'&gt;Content-Type&lt;/span&gt;&lt;span lang=EN style='font-size:12.0pt; font-family:"Times New Roman","serif"'&gt; header to classify the part with a MIME type and character set. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-1631510150442835580?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/1631510150442835580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=1631510150442835580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/1631510150442835580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/1631510150442835580'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/08/uploading-files-with-multipart-post.html' title='Uploading Files with a Multipart POST'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-6474133490237942538</id><published>2009-08-03T17:57:00.000+05:30</published><updated>2009-08-14T07:55:54.234+05:30</updated><title type='text'></title><content type='html'>Online subscription to RSS feeds using Google Reader.&lt;br /&gt;&lt;br /&gt;we can subscribe and manage to RSS feeds using Google feature Google Reader.&lt;br /&gt;In this the trends is very useful feature.&lt;br /&gt;and we can categorise and share with other friends.&lt;br /&gt;http://www.google.com/reader&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-6474133490237942538?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/6474133490237942538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=6474133490237942538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/6474133490237942538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/6474133490237942538'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/08/online-subscription-to-rss-feeds-using.html' title=''/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-914980897462039997</id><published>2009-08-03T17:52:00.000+05:30</published><updated>2009-08-14T07:55:54.238+05:30</updated><title type='text'></title><content type='html'>Post images in Tweeter&lt;br /&gt;&lt;br /&gt; How do I create a Twitpic account?&lt;br /&gt;If you have a Twitter account then you already have a Twitpic account, just login to Twitpic with your Twitter username and password and you are all set.&lt;br /&gt;&lt;br /&gt;If you don't have a Twitter account you can sign up for one for free at Twitter.com&lt;br /&gt; How do I delete a photo?&lt;br /&gt;1. Login to Twitpic&lt;br /&gt;2. Click the "Home" link at the top of the page, this will take you to your photo stream&lt;br /&gt;3. Click the trash can icon () next to the photo you wish to delete&lt;br /&gt; How do I delete a comment on my photo?&lt;br /&gt;1. Login to Twitpic&lt;br /&gt;2. Navigate to the photo with the comment you wish to delete&lt;br /&gt;3. Click the trash can icon () next to the comment you wish to delete&lt;br /&gt; How do I delete a tag on my photo?&lt;br /&gt;1. Login to Twitpic&lt;br /&gt;2. Navigate to the photo with the tag you wish to delete&lt;br /&gt;3. Click the trash can icon () next to the tag you wish to delete&lt;br /&gt;&lt;br /&gt;http://www.twitpic.com/faq.do&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-914980897462039997?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/914980897462039997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=914980897462039997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/914980897462039997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/914980897462039997'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/08/post-images-in-tweeter-how-do-i-create.html' title=''/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-9195066871795997062</id><published>2009-06-21T12:02:00.003+05:30</published><updated>2009-06-21T12:02:32.690+05:30</updated><title type='text'>MySQL Crash Recovery</title><content type='html'>&lt;div class=Section1&gt;  &lt;p&gt;&lt;strong&gt;MySQL Crash Recovery&lt;/strong&gt;&lt;br&gt; MySQL is known for its stability but as any other application it has bugs so it may crash sometime. Also operation system may be flawed, hardware has problems or simply power can go down which all mean similar things &amp;#8211; MySQL Shutdown is unexpected and there could be various inconsistences. And this is not only problem as we&amp;#8217;ll see.&lt;br&gt; MySQL has angel process mysqld_safe which will restart MySQL Server in most cases. It is great, unless you have run into some bug which causes it to crash again &amp;#8211; such crashes qucikly following one another are kind of worse because they explore many less tested code paths in MySQL and so problem potential is larger.&lt;br&gt; So lets look at the problem which happen during the crash which might need to take care of or which may seriously affect MySQL Performance.&lt;br&gt; &lt;strong&gt;MyISAM Corruption -&lt;/strong&gt; If you&amp;#8217;re writing to MyISAM tables there is very large chance of them becoming corrupted during the crash. Note corruption may be hidden and do not expose itself instantly &amp;#8211; you may notice wrong query results days after crash. Sometimes corrupted tables may be reason for further crashes or hangs, and corruption may spread itself further in the table. You probably do not want any of these so it is very good idea to run MySQL with myisam_recover option which will make sure all improperly closed MyISAM tables are checked first time it is accessed. This option is however rather painful to use with web applications &amp;#8211; users may issue different queries which may trigger check/repair running for many tables at onces, which typically make system extremely slow and also can use up all allowed connections or run out of memory ( myisam_sort_buffer_size is normally set pretty lage). If this becomes the problem I use tiny script which moves out all MyISAM tables out of MySQL database directory, checks them with MyISAMchk and moves them back to running server. This looks scary but it works great &amp;#8211; until table is checked and ready application gets error rather than stalling forever which allows application to become partially functional as soon as possible. This hack is needed only in some cases &amp;#8211; in most cases using Innodb for tables which you need to be recovered fast is better solution.&lt;br&gt; &lt;strong&gt;Innodb Recovery &amp;#8211; &lt;/strong&gt;Unless you have some hardware problems (99%) or found new Innodb bug (1%) Innodb recovery should be automatic and bring your database to consistent state. Depending on innodb_flush_lot_at_trx_commit setting you may lose few last committed transactions but it is it. It is Performance of this process which may cause the problems. As I already wrote innodb_log_file_size and innodb_buffer_pool_size affect recovery time significantly as well as your workload. I should also mention if you have innodb_file_per_table=1 your recovery speed will depend on number of Innodb tables you have, as well as many other operations, so beware.&lt;br&gt; &lt;strong&gt;Binary log corruption -&lt;/strong&gt; Binary log may become corrupted and out of sync with database content. This will sometimes break replication but if you&amp;#8217;re just planning on using binary log for point in time recovery it can go unnoticed. sync_binlog Is helping by syncing binary log, but at performance penalty. If using Innodb you also might with to use innodb-safe-binlog option in MySQL 4.1 so your Innodb log and binary log are synchronized. In MySQL 5.0 XA is taking care of this synchronization.&lt;br&gt; &lt;strong&gt;.frm Corruption &amp;#8211; &lt;/strong&gt;Few people know MySQL is not really ACID even with Innodb tables, at least not for DDL statements.&lt;br&gt; There is a chance of failing for example during CREATE statement with table created in Innodb dictionary but .frm not created or not completely written. Partially written .frm files or .frm being unsync with internal Innodb dictionary may cause MySQL to fail with wierd error messages. In MySQL 4.1 sync_frm option was added which reduces this problem as time window when it can happen is much less. Still if failure happens just during writting .frm file nasty things may happen, not to mention such potentially multiple operation DDL statements as RENAME TABLE &amp;#8211; these are most vulnerable.&lt;br&gt; &lt;strong&gt;master.info corruption -&lt;/strong&gt; If slave happens to crash you can also have relay logs corruption and master.info being corrupted. Not to mention MyISAM tables can contain partially completed statements as well as some of updates totally lost. The safe approach it to reclone the slaves if they crash or you can take the risks and try to continue. Sometimes you might be able to manually find appropriate position even if master.info file is out of sync but I would not be basing my failure handling scenarios.&lt;br&gt; &lt;strong&gt;Cold Start &amp;#8211; &lt;/strong&gt;If you restart MySQL server its caches (key_buffer, innodb_buffer_pool, query_cache,table_cache) are cleaned, so may be OS caches. This may reduce performance dramatically. So if you&amp;#8217;re bringing server back after crash you might want to populate caches. For MyISAM key_cache this can be done by using LOAD INDEX INTO CACHE statement, for other storage engines it can be done by issuing large index scan queries. Full table scan queries allow to preload table data ether in storage engine caches or in OS cache. You can save these into .sql file and use &amp;#8211;init-file to make sure it is run on startup. The other approach is to prime server with real servers (ie clone queries from other slave) before putting traffic to it.&lt;br&gt; In case application is not highly available so there is only one server you might with to start serving only some users initially (returning error to others) and gradually increase the load as server warms up. This may sound strange but makes a lot of sense as not only waiting for pages which never load is more frustrating for users than getting honest &amp;#8220;try again later&amp;#8221; message, but also &amp;#8211; warmup takes longer time on extreme load.&lt;br&gt; &lt;strong&gt;Innodb statistics -&lt;/strong&gt; Unlike MyISAM Innodb does not store index cardinality in tables, instead it computes them on first table access after startup. This may take significant time if you have very large number of tables (Some users have hundreds of thousands of tables per database host). This one is pretty much part of cold start problems but I wanted to point out it separately. To warmup this data you might run select 1 from _table_ limit 1 for each table or any other statement &amp;#8211; it is table open which is important.&lt;br&gt; There are other problems which you may experience related to MySQL Crash Recovery &amp;#8211; Restoring data from backup, corrupted Innodb tablespace recovery etc but I should write about them some other time.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Reference by : http://www.mysqlperformanceblog.com/2006/07/30/mysql-crash-recovery/&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-9195066871795997062?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/9195066871795997062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=9195066871795997062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/9195066871795997062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/9195066871795997062'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/06/mysql-crash-recovery.html' title='MySQL Crash Recovery'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-1581066989015632435</id><published>2009-06-21T12:02:00.001+05:30</published><updated>2009-06-21T12:02:27.606+05:30</updated><title type='text'>Understanding MySQL Query Cache for PHP Developers</title><content type='html'>&lt;div class=Section1&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;Problem Statement:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Many PHP developers using MySQL have unclear understanding of the MySQL query cache. So we decided to write a series of introductory articles to get everyone on the same page. This article is the first installment of the series and here we will introduce the basics of query cache in MySQL. Note that unlike a typical book chapter, this article will be of low-fat flavor &amp;#8212; less theory and more actionables &amp;#8212; of an introduction to query caching for MySQL.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;What is a MySQL query cache?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;It turns out that MySQL has a built-in query cache that can cache a specific type of queries &amp;#8212; SELECT statements &amp;#8212; to speed up delivery of the result sets. The cache can increase performance for many instances but can also hurt performance if not used wisely.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;What can be cached in the MySQL query cache?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Only SELECT statements can be cached. This does not include prepared SELECT statements. Query caching only works for SELECT statements that are fully qualified and returns same result every time. This means you cannot use non deterministic functions that return data depending on situation. For example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;// Following SELECT query can be cached&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;$stmt = &amp;quot;SELECT * FROM user WHERE active = 1&amp;quot;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;// Following SELECT query cannot be cached&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;$stmt = &amp;quot;SELECT * FROM user where signup_date &amp;gt;= NOW()&amp;quot;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;// Following SELECT query cannot be cached&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;$stmt = &amp;quot;SELECT count(*) FROM user&amp;quot;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Here are the requirements a query must meet to take advantage of the query cache:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo3'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Only      exact queries are serviced from the cache &amp;#8212; must match the stored query in      exact detail.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo3'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Queries      with placeholders &amp;#8212; such as the ones for prepared statements &amp;#8212; are not      cached in query cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo3'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Queries      with user defined functions or non-deterministic functions cannot be      cached&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo3'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Any      table changes (such as issuing of an ALTER statement) will remove the queries      from the cache for that table&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;Introduction to query cache parameters&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;The more you understand the query caching parameters, the better you are going to be at tuning the query cache to your advantage. First find out what are the global query caching parameters that you can fiddle with using the following query at the mysql command-line prompt.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;mysql&amp;gt; show global&amp;nbsp; variables like '%query_cache%';&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;A sample output is shown below:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+------------------------------+-----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Variable_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+------------------------------+-----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| have_query_cache&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | YES&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| query_cache_limit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1048576&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| query_cache_min_res_unit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 4096&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| query_cache_size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 536870912 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| query_cache_type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| query_cache_wlock_invalidate | OFF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+------------------------------+-----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;6 rows in set (0.00 sec)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;The purpose of these parameters are described briefly as:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo6'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;have_query_cache&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - size of      query cache in bytes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo6'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;query_cache_limit&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - the      maximum size of result set (default: 1048576 bytes or 1 MB). If your query      returns result set that is greater than the limit set here, it will NOT BE      CACHED&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo6'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;query_cache_min_res_unit&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - the      smallest block size allocated by query cache. Default is 4KB&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo6'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;query_cache_size&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - the      total memory available to query cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo6'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;query_cache_type&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - when set      to ON or 1, query caching is on for all applicable queries, when set to      OFF (0) query caching is turned off and when set to DEMAND or 2, caching      is on for queries with SQL_CACHE directive in the query&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo6'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;query_cache_wlock_invalidate&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;-causes the      query cache to invalidate any query in the cache if a write lock is      executed against the table(s) it uses&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;Whats your query cache status right now?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;To find out whats going on with your query cache, run the following command from the MySQL command-line prompt:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;mysql&amp;gt; show status like '%qc%';&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Here is a sample result:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+-------------------------+-----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Variable_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | Value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+-------------------------+-----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_free_blocks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 978&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_free_memory&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 527371984 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_hits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 645545&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_inserts&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 130796&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_lowmem_prunes&amp;nbsp;&amp;nbsp;&amp;nbsp; | 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_not_cached&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 417579&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_queries_in_cache | 4973&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_total_blocks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 11167&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+-------------------------+-----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;8 rows in set (0.00 sec)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Here are some brief explanations of these status metrics:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo9'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;Qcache_free_blocks&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - number of      memory blocks marked as free, which indicates memory fragmentation&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo9'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;Qcache_free_memory&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - total      amount of memory free for query cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo9'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;Qcache_hits&lt;/span&gt;&lt;/b&gt;&lt;span style='font-size:      12.0pt;font-family:"Times New Roman","serif"'&gt; - number of times query      result was found in the query cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo9'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;Qcache_inserts&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - number      of times queries were written to the query cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo9'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;Qcache_not_cached&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - number      of queries removed from cache due to low cache memory&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo9'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;Qcache_queries_in_cache&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - number      of queries that could not be cached&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo9'&gt;&lt;b&gt;&lt;span style='font-size:12.0pt;font-family:      "Times New Roman","serif"'&gt;Qcache_total_block&lt;/span&gt;&lt;/b&gt;&lt;span      style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt; - total      number of blocsk in query cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;Calculating query cache hits vs misses&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;Here is the formula for calculating hit ratio for query cache:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;$totalSelectQueryCount = $comSelect + $qcacheHits&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;$percentHits&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = ($qcacheHits * 100)/ $totalSelectQueryCount&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;What the above formula does is adds up all the SELECT queries in the system using two MySQL global variables: com_select and qcache_hits.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;To set $comSelect, run &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;show global status like '%com_select%'&lt;/span&gt;&lt;span style='font-size:12.0pt; font-family:"Times New Roman","serif"'&gt; query. For example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;mysql&amp;gt; show global status like '%com_select%';&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+---------------+---------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Variable_name | Value&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+---------------+---------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Com_select&amp;nbsp;&amp;nbsp;&amp;nbsp; | 1739663 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+---------------+---------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;To set $qcacheHits, run &lt;/span&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;show status like '%qcache_hit%'&lt;/span&gt;&lt;span style='font-size:12.0pt;font-family: "Times New Roman","serif"'&gt;. For example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;mysql&amp;gt; show&amp;nbsp; status like '%qcache_hit%';&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+---------------+----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Variable_name | Value&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+---------------+----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;| Qcache_hits&amp;nbsp;&amp;nbsp; | 20786961 |&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;+---------------+----------+&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;With the above sample number, the percent hit is 92.28% which is great.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;b&gt;&lt;span style='font-size:13.5pt;font-family:"Times New Roman","serif"'&gt;Managing query cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;To manipulate your query cache, you can use the following MySQL statements from the MySQL command-line:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;To remove all the queries from your query cache, run:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;RESET QUERY CACHE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto'&gt;&lt;span style='font-size:12.0pt;font-family:"Times New Roman","serif"'&gt;To defragment the query cache memory, run:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;span style='font-size:10.0pt;font-family:"Courier New"'&gt;FLUSH QUERY CACHE;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-1581066989015632435?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/1581066989015632435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=1581066989015632435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/1581066989015632435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/1581066989015632435'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/06/understanding-mysql-query-cache-for-php.html' title='Understanding MySQL Query Cache for PHP Developers'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-5402119902949292443</id><published>2009-06-16T08:02:00.001+05:30</published><updated>2009-06-16T08:02:27.170+05:30</updated><title type='text'>8 Popular Open Source Forums</title><content type='html'>&lt;!-- Converted from text/rtf format --&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;The list below is a collection of 8 popular Open Source Forum software.&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- phpBB is one of the most popular forum softwares. With phpBB you can customize with mods and you can stylize your forum. For a fully Modded phpBB forum with about 500 different mods that all have been fully tested click&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;/SPAN&gt;&lt;A HREF="http://phpbb-fm.com/support/index_fm.php"&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;U&gt;&lt;FONT COLOR="#0000FF" SIZE=2 FACE="Arial"&gt;here&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- Vanilla is a lightweight open source forum that was developed by Mark O&amp;#8217;Sullivan using PHP and MySQL. Vanilla comes loaded with extensions, and you can customize the forum with your own add-ons.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- YetAnotherForum.NET is a Open Source forum or bulletin board for web sites running ASP.NET. YetAnotherForum.NET is fully coded in C# ASP.Net and uses Microsoft SQL Server. It comes with all the standard forum features and even WYSIWYG editors.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- YaBB is an Open Source forum system (bulletin board, message board) written in Perl. This system is the first and most popular open-source perl forum software and it runs very fast.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- IceBB is an open-source forum solution powered by PHP and MySQL. IceBB is written with the prototype and scriptaculous frameworks and the code output is very clean. IceBB has mostly all the same features as some of the paid forums but it even has an RSS feed.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- WP-Forum is a simple discussion forum plugin for WordPress. It has three themes that you can choose from and is a simple solution if you have a WordPress powered site.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- miniBB is an open source message board script written in PHP. miniBB is a lightweight and compact alternative to phpBB. With miniBB you can customize the software with add-ons and it is Search Engine Optimized.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;FONT COLOR="#008000" SIZE=2 FACE="Symbol"&gt;&amp;#183;&lt;FONT FACE="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt; &lt;FONT COLOR="#008000" SIZE=2 FACE="Arial"&gt;- SMF is a free professional grade forum software that actually isn&amp;#8217;t open source. SMF has loads of features with a great community and tons of free modifications.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;If you know of any more Open Source Forums then please comment below. Thanks!!!&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;Popularity: 100%&lt;/SPAN&gt;&lt;/P&gt;  &lt;P DIR=LTR&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;SPAN LANG="en-us"&gt;&lt;/SPAN&gt;&lt;/P&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-5402119902949292443?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/5402119902949292443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=5402119902949292443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5402119902949292443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5402119902949292443'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/06/8-popular-open-source-forums.html' title='8 Popular Open Source Forums'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-7576939226703081565</id><published>2009-05-25T16:06:00.000+05:30</published><updated>2009-05-25T16:07:16.560+05:30</updated><title type='text'>Learning Programming ,Products,Videos,Books,Questions And Others</title><content type='html'>&lt;div class=Section1&gt;  &lt;div id=ygrp-mlmsg&gt;  &lt;div id=ygrp-msg&gt;  &lt;div id=ygrp-text&gt;  &lt;p class=style3 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/"&gt;&lt;span style='font-size:13.5pt'&gt;http://www.Code-Microsoft.com/&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.code-microsoft.com/"&gt;&lt;span style='color:#1F497D;text-decoration: none'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class=style2 align=center style='text-align:center'&gt;&lt;u&gt;&lt;span style='color:blue'&gt;&lt;a href="http://www.code-microsoft.com/"&gt;Free Learning Programming Videos&lt;/a&gt;&lt;/span&gt;&lt;/u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=.NET+Framework"&gt;.NET Framework&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Active+server+pages"&gt;Active Server Pages&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Activex"&gt;Activex&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Api"&gt;Api&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=AppleScript"&gt;AppleScript&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=ASP"&gt;ASP&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Asp.net"&gt;Asp.net&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Assembly"&gt;Assembly&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Basic+Programming"&gt;Basic Programming&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=C%23"&gt;C#&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=C%2B%2B"&gt;C++&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=CGI"&gt;CGI&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Cobol"&gt;Cobol&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Code+Project"&gt;Code Project&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Database"&gt;Database&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Delphi"&gt;Delphi&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Developer"&gt;Developer&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Forth"&gt;Forth&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Fortran"&gt;Fortran&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Free+source"&gt;Free Source&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=informix"&gt;informix&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=java"&gt;java&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=java+Script"&gt;java Script&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Lsip"&gt;Lsip&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=microsoft+project"&gt;Microsoft Project&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=msdn"&gt;Msdn&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Object%20Oriented"&gt;Object Oriented&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Oracle"&gt;Oracle&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Pascal"&gt;Pascal&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Perl"&gt;Perl&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=PHP"&gt;PHP&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Programmer"&gt;Programmer&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Programming"&gt;Programming&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Projects+in+vb"&gt;Projects in VB&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Python"&gt;Python&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=RPG"&gt;RPG&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=source+code"&gt;Source Code&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=SQL"&gt;SQL&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Sql+Lite"&gt;Sql Lite&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=SQL+Server"&gt;SQL Server&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Tcl+Tk"&gt;Tcl Tk&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=vb"&gt;VB&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=VBScript"&gt;VBScript&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=Visual%20Basic"&gt;Visual Basic&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=vb+ocx"&gt;VB OCX&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=visual+basic+2003"&gt;Visual Basic 2003&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=visual+basic+2005"&gt;Visual Basic 2005&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=visual+basic+2008"&gt;Visual Basic 2008&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=visual+studio+2003"&gt;Visual Studio 2003&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=visual+studio+2005"&gt;Visual Studio 2005&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=visual+studio+2008"&gt;Visual Studio 2008&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=visual+studio+2010"&gt;Visual Studio 2010&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=web"&gt;Web&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/videos/index.php?search=xml"&gt;xml&lt;/a&gt;&lt;span style='color:#1F497D'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=style1 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/"&gt;Learn Free Any Language Programming From Here Products,Videos,Books,Questions And Others&lt;/a&gt;&lt;span style='color:#1F497D'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=style2 align=center style='text-align:center'&gt;&lt;a href="http://www.code-microsoft.com/"&gt;http://www.code-microsoft.com&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div&gt;  &lt;p class=MsoNormal&gt;&lt;span style='color:white'&gt;__._,_.___,___&lt;/span&gt;&lt;span style='color:#1F497D'&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-7576939226703081565?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/7576939226703081565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=7576939226703081565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/7576939226703081565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/7576939226703081565'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/05/learning-programming.html' title='Learning Programming ,Products,Videos,Books,Questions And Others'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-5072519584308761816</id><published>2009-05-06T08:18:00.001+05:30</published><updated>2009-05-06T08:18:19.226+05:30</updated><title type='text'>Why Lower case table names are not possible in windows for MySql</title><content type='html'>&lt;div class=Section1&gt;  &lt;p&gt;&lt;span style='font-family:Symbol'&gt;·&lt;/span&gt;&amp;nbsp; &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;lower_case_table_names&lt;/span&gt;&lt;/code&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;If set to 1, table names are stored in lowercase on disk and table name comparisons are not case sensitive. If set to 2 table names are stored as given but compared in lowercase. This option also applies to database names and table aliases. See &lt;a href="http://www.linuxtopia.org/online_books/database_guides/mysql_5.1_database_reference_guide/name-case-sensitivity.html" title="9.2.2.Â&amp;nbsp;Identifier Case Sensitivity"&gt;SectionÂ&amp;nbsp;9.2.2, â€œIdentifier Case Sensitivityâ€&lt;/a&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;If you are using &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;InnoDB&lt;/span&gt;&lt;/code&gt; tables, you should set this variable to 1 on all platforms to force names to be converted to lowercase. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;You should &lt;em&gt;not&lt;/em&gt; set this variable to 0 if you are running MySQL on a system that does not have case-sensitive filenames (such as Windows or Mac OS X). If this variable is not set at startup and the filesystem on which the data directory is located does not have case-sensitive filenames, MySQL automatically sets &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;lower_case_table_names&lt;/span&gt;&lt;/code&gt; to 2. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-5072519584308761816?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/5072519584308761816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=5072519584308761816' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5072519584308761816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5072519584308761816'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/05/why-lower-case-table-names-are-not.html' title='Why Lower case table names are not possible in windows for MySql'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-5379758973606940588</id><published>2009-05-01T12:03:00.001+05:30</published><updated>2009-05-01T12:04:22.978+05:30</updated><title type='text'>One Bedroom Flat....</title><content type='html'>&lt;div class=Section1&gt;  &lt;div&gt;  &lt;div&gt;  &lt;div&gt;  &lt;div&gt;  &lt;div&gt;  &lt;div&gt;  &lt;div&gt;  &lt;p&gt;&lt;span style='font-size:18.0pt;color:purple'&gt;ONE BEDROOM FLAT... AN INDIAN SOFTWARE ENGINEER'S LIFE... &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;/div&gt;  &lt;p&gt;As the dream of most parents I had acquired a degree in Software Engineer and joined a company based in USA , the land of braves and opportunity. When I arrived in the USA, it was as if a dream had come true. &lt;br&gt; &lt;br&gt; Here at last I was in the place where I want to be. I decided I would be staying in this country for about Five years in which time I would have earned enough money to settle down in India &lt;br&gt; &lt;br&gt; My father was a government employee and after his retirement, the only asset he could acquire was a decent one bedroom flat. &lt;br&gt; &lt;br&gt; I wanted to do some thing more than him. I started feeling homesick and lonely as the time passed. I used to call home and speak to my parents every week using cheap international phone cards. Two years passed, two years of Burgers at McDonald's and pizzas and discos and 2 years watching the foreign exchange rate getting happy whenever the Rupee value went down. &lt;br&gt; &lt;br&gt; Finally I decided to get married. Told my parents that I have only 10 days of holidays and everything must be done within these 10 days. I got my ticket booked in the cheapest flight. Was jubilant and was actually enjoying hopping for gifts for all my friends back home. If I miss anyone then there will be talks. After reaching home I spent home one week going through all the photographs of girls and as the time was getting shorter I was forced to select one candidate. &lt;br&gt; &lt;br&gt; In-laws told me,to my surprise, that I would have to get married in 2-3 days, as I will not get anymore holidays. After the marriage, it was time to return to USA , after giving some money to my parents and telling the neighbors to look after them, we returned to USA &lt;br&gt; &lt;br&gt; My wife enjoyed this country for about two months and then she started feeling lonely. The frequency of calling India increased to twice in a week sometimes 3 times a week. Our savings started diminishing. After two more years we started to have kids. Two lovely kids, a boy and a girl, were gifted to us by the almighty. Every time I spoke to my parents, they asked me to come to India so that they can see their grand-children. &lt;br&gt; &lt;br&gt; Every year I decide to go to India. But part work part monetary conditions prevented it. Years went by and visiting India was a distant dream. Then suddenly one day I got a message that my parents were seriously sick. I tried but I couldn't get any holidays and thus could not go to India The next message I got was my parents had passed away and as there was no one to do the last rights the society members had done whatever they could. I was depressed. My parents had passed away without seeing their grand children. &lt;br&gt; &lt;br&gt; After couple more years passed away, much to my children's dislike and my wife's joy we returned to India to settle down. I started to look for a suitable property, but to my dismay my savings were short and the property prices had gone up during all these years. I had to return to the USA &lt;br&gt; &lt;br&gt; My wife refused to come back with me and my children refused to stay in India. My 2 children and I returned to USA after promising my wife I would be back for good after two years. &lt;br&gt; &lt;br&gt; Time passed by, my daughter decided to get married to an American and my son was happy living in USA I decided that had enough and wound-up every thing and returned to India. I had just enough money to buy a decent 02 bedroom flat in a well-developed locality. &lt;br&gt; &lt;br&gt; Now I am 60 years old and the only time I go out of the flat is for the routine visit to the nearby temple. My faithful wife has also left me and gone to the holy abode. &lt;br&gt; &lt;br&gt; Sometimes I wondered was it worth all this? My father, even after staying in India, had a house to his name and I too have the same nothing more. &lt;br&gt; &lt;br&gt; I lost my parents and children for just &lt;u&gt;ONE EXTRA BEDROOM &lt;/u&gt;. &lt;br&gt; &lt;br&gt; Looking out from the window I see a lot of children dancing. This damned cable TV has spoiled our new generation and these children are losing their values and culture because of it. I get occasional cards from my children asking I am alright. Well at least they remember me. &lt;br&gt; &lt;br&gt; Now perhaps after I die it will be the neighbors again who will be performing my last rights, God Bless them. But the question still remains 'was all this worth it?' &lt;br&gt; &lt;br&gt; I am still searching for an answer...... ......... .!!!! &lt;b&gt;&lt;span style='font-size:10.0pt'&gt;&lt;br&gt; &lt;br&gt; &lt;/span&gt;&lt;/b&gt;By an Indian SE who was in US.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-5379758973606940588?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/5379758973606940588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=5379758973606940588' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5379758973606940588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5379758973606940588'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/05/one-bedroom-flat.html' title='One Bedroom Flat....'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-5956539811159295598</id><published>2009-05-01T12:03:00.000+05:30</published><updated>2009-05-01T12:04:18.371+05:30</updated><title type='text'>missing scroll bar in IE6</title><content type='html'>&lt;div class=Section1&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;first remove any position: relative; from css and try&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;http://bytes.com/topic/html-css/answers/571528-scroll-bar-missing-ie6-due-issues-relative-positioning-css&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-5956539811159295598?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/5956539811159295598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=5956539811159295598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5956539811159295598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/5956539811159295598'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/05/missing-scroll-bar-in-ie6.html' title='missing scroll bar in IE6'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-4893540612666319010</id><published>2009-05-01T11:28:00.000+05:30</published><updated>2009-05-01T11:29:11.384+05:30</updated><title type='text'>Does Your Web Site Suck?</title><content type='html'>&lt;div class=Section1&gt;  &lt;h2&gt;149 Mortal Sins That Will Send Your Site to Web Design Hell&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;h2&gt;&amp;nbsp;&amp;#8220;Does my web site suck?&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;Of all the e-mail questions I receive, this one amazes me the most. Perhaps my amazement is because I&amp;#8217;m a left-brain kind of guy. When I look in the mirror I see a balding, overweight, post-middle-age, white guy. I don&amp;#8217;t look in the mirror and see Tom Cruise &amp;#8212; I&amp;#8217;m a lot taller.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;If I weren&amp;#8217;t logical, there&amp;#8217;s a simple way for me to figure out if there&amp;#8217;s a resemblance. I could ask people. After embarrassing myself, I might figure out that I don&amp;#8217;t look like Tom.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;It would hurt my ego far less to sit in the privacy of my home and go through a checklist of Tom&amp;#8217;s attributes and see if I matched them.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ol start=1 type=1&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l3 level1 lfo3'&gt;Do I have a full head of dark hair?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l3 level1 lfo3'&gt;Am I thin and fit?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l3 level1 lfo3'&gt;Do I have a killer smile?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l3 level1 lfo3'&gt;Do women come up to me and go, &amp;#8220;Oooh. Tom&amp;#8221;?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l3 level1 lfo3'&gt;When excited, do I jump up on sofas?&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;A one out of five score does not qualify me as Tom Cruise. (I said &amp;#8220;Yes&amp;#8221; to #5).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;It&amp;#8217;s the same with critiquing web sites. It&amp;#8217;s far easier and less painful to sit down in the privacy of your office and go through and fill out two checklists.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;My two web design checklists make critiques simple.&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;Checklist #1 is so simple, a brain-dead senior-level executive can use it to figure out if their web site sucks. How is this possible? I&amp;#8217;m going to give you the answer to every question.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The answer sheet: If you check the box for any of the questions, your web site sucks. Period. &lt;/strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;There is a one problem, though. It takes a good deal of knowledge to fill out the checklist. You have to know how your site is constructed and you have to have a good understanding of web design. If you don&amp;#8217;t know what a MARQUEE tag does or that your site&amp;#8217;s content came from a Microsoft Word document and was converted to HTML, it will be difficult to completely fill out the checklist.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;The mistakes in Checklist #1 are fatal. I&amp;#8217;m not sure how many of the mistakes in Checklist #2 you can make before you kill your web site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;a name=note2 id=note2&gt;&lt;/a&gt;Note:&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;Yes, WebPagesThatSuck.com fails to pass the checklist. The site&amp;#8217;s design has always sucked.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h1&gt;&lt;a name=top id=top&gt;&lt;/a&gt;Checklist 1:&lt;o:p&gt;&lt;/o:p&gt;&lt;/h1&gt;  &lt;h3&gt;&lt;a name=firstimpression id=firstimpression&gt;&lt;/a&gt;First Impression / Big Picture&lt;o:p&gt;&lt;/o:p&gt;&lt;/h3&gt;  &lt;p class=MsoNormal&gt;We&amp;#8217;ve designed our site to meet our organization&amp;#8217;s needs (more sales/contributions) rather than meeting the needs of our visitors. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site tries to tell you how wonderful we are as a company, but not how we&amp;#8217;re going to solve your problems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;It takes longer than four seconds for the man from Mars to understand what our site is about. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The man from Mars cannot quickly find the focal point of the home page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The man from Mars cannot quickly find the focal point of the current page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t make us look like credible professionals. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t make visitors feel they can trust us. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our home page &amp;#8212; or any page &amp;#8212; takes more than four seconds to load. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Quickly scanning the page doesn&amp;#8217;t tell our visitors much about its purpose. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don &amp;#8216;t put design elements where our visitors expect them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We have not eliminated unnecessary design items. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t know which design items are not necessary. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site breaks when visited with the Javascript turned off. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site breaks because of back-end coding errors. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We say &amp;#8220;Welcome to&amp;#8230;&amp;#8221; on our home page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site is Flash-based (and this is what our site looks like to people without Flash.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s navigation is Flash-based. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses a splash page (unless it&amp;#8217;s a liquor, porn, gambling, adult, tobacco, or a multi-lingual / multinational site). &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site makes visitors register before they can enter. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses two or more splash pages. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s TITLE tag is something like &amp;#8220;New Document&amp;#8221;, &amp;#8220;Index&amp;#8221; and not the name of your company or other search-engine friendly terms. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has a sound file automatically play in the background when a web page loads, but we&amp;#8217;re not a record label or musician &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;I don&amp;#8217;t know if our site looks the same in the major browsers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t look the same in different browsers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The important content does not fit in the first screen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our pages have too much/too little white space. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses pop-up windows.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site forces visitors to install weird plugins. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has &amp;#8220;Download latest browser&amp;#8221; text or buttons. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site prominently displays what hardware and software was used to create the site. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s design was &amp;#8220;borrowed&amp;#8221; from another site. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t provide clear instructions on how to perform tasks like ordering, filling out forms, etc. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site disables a visitors right-click mouse button because we&amp;#8217;re crazy enough to think we have content worth stealing and that our visitors are too stupid to figure out how to bypass our code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site is based on a template that&amp;#8217;s bloated with ugly code, is difficult to maintain, and is, quite frankly, broken. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t identify PDF files with an icon. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t analyze our log files. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We never conduct user testing. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h3&gt;Text and Links&lt;o:p&gt;&lt;/o:p&gt;&lt;/h3&gt;  &lt;p class=MsoNormal&gt;Our site mixes and matches text sizes on the page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site mixes text colors on the page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s text requires people to have special (unusual) fonts on their computers to correctly view our text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Visitors can&amp;#8217;t read our text because it&amp;#8217;s too small. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our SITE USES LOTS OF WORDS IN ALL-CAPS. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses scrolling, blinking, fading, or moving text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The color contrast analyzer says there isn&amp;#8217;t enough contrast between text/links and the background. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;AccessColor says there isn&amp;#8217;t enough contrast between our stylesheet and our page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses centered text on more than just headlines. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use justified text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use browser-specific tags like &amp;lt;MARQUEE&amp;gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use font faces that are not appropriate for our audience &amp;#8212; like Comic Sans on a senior citizen site. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has text in the status bar &amp;#8212; moving Javascript text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We have too much/too little text on a page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses underlined text. (Only links should be underlined.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has sideways text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Visited links don&amp;#8217;t change color. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our links are not clearly labeled. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has too many links in one area. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has too many links. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has lots of dead links. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has lots of dead links and/or no 404 pages. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has lots of complex URLs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has links consisting of 10-20 words. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our links are not informative. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h3&gt;Graphics, Video, Audio &lt;o:p&gt;&lt;/o:p&gt;&lt;/h3&gt;  &lt;p class=MsoNormal&gt;Our logo does not look like it was professionally made. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our logo is a bad scan of a business card.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Logo is not above the fold. (Yes, this does happen.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Logo is not on the top of every page and clicking it doesn&amp;#8217;t lead to the home page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;If your site has banner ads (especially near the top of the page), keep graphics away from them. People tend to ignore ads and they&amp;#8217;ll ignore your graphics.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses cheap clip art instead of high-quality web graphics.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses divider bars.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses large (file-size) graphics. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses graphics that detract from the page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site automatically loads movies instead of using YouTube&amp;#8217;s method of only showing movies when people click.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses a trailing cursor. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses IE page transitions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses &amp;#8220;Under Construction&amp;#8221; graphics.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t physically reduce graphics using Photoshop (or other program). Instead, we take a 1200 x 800 pixel photo and manually changing the width and height attributes of the IMG tag to a smaller size.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses graphics for text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has an ugly color scheme (red and green, for example).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our sites&amp;#8217; symbols are not logical. Our shopping cart symbol doesn&amp;#8217;t look like a shopping cart.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Instead of calling it a shopping cart, we call it a basket or other silly term.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses animations gratuitously.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses animated GIFs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses 3-D graphics.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses gradient images.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses beveled images.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses images with shadows.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has flashing graphics that might cause seizures.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses a background graphic that repeats itself on large-screen monitors.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our background graphic doesn&amp;#8217;t contrast well against the text, making it hard to read.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our graphics don&amp;#8217;t have ALT= attribute text filled in and doesn&amp;#8217;t use &amp;#8220;&amp;#8221; for graphics that are empty.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s graphics are confusing &amp;#8212; they look like ads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses moving graphics &amp;#8212; falling snowflakes, flying birds &amp;#8212; stupidly rendered by DHTML. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t use color to convey meaning &amp;#8212; red text signifies &amp;#8220;this is important.&amp;#8221; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;No one has spent the time figuring out if our color scheme alienates our international users.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has multiple colored areas on the page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has blocks of ugly colors next to each other (red next to green).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Each page on our site is one big imagemap.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has graphics that suffer from the &amp;#8220;halo effect&amp;#8221; &amp;#8212; dithering that leaves an ugly halo around the image. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h3&gt;Navigation&lt;o:p&gt;&lt;/o:p&gt;&lt;/h3&gt;  &lt;p class=MsoNormal&gt;We created our site&amp;#8217;s navigational system to meet our needs, not our visitors&amp;#8217; needs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We understand how our site&amp;#8217;s navigation works so everybody else probably understands how it works.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We have a page or a popup explains how our navigation works.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;A site&amp;#8217;s navigation should tell you where you are, where you&amp;#8217;re going to go, and how to get back to the home page. Our site&amp;#8217;s navigation doesn&amp;#8217;t.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses Mystery Meat Navigation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses Flash navigation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;A man from Mars could not quickly understand our site&amp;#8217;s navigation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Although people don&amp;#8217;t want to learn a new navigational system, we&amp;#8217;ve created our own anyway.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses JavaScript for navigation and it doesn&amp;#8217;t degrade naturally for visitors who come with JavaScript turned off.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses sideways navigation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use stupid terms like &amp;#8220;stuff&amp;#8221; for our navigational links or &amp;#8220;Beginning&amp;#8221; for &amp;#8220;Home.&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t have shortcuts on the main page to the popular content.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s navigation is not in the top screen.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Instead of being predictable, our site&amp;#8217;s navigation is inconsistent.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Instead of being predictable, our site&amp;#8217;s navigational placement is inconsistent from page to page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s content is not divided into logical categories and subcategories.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The names of the categories and subcategories are not clear and mutually exclusive on our site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our links aren&amp;#8217;t clearly labeled and don&amp;#8217;t tell you where you&amp;#8217;ll end up.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our links aren&amp;#8217;t clearly labeled, don&amp;#8217;t tell you where you&amp;#8217;ll end up, and say &amp;#8220;Click Here.&amp;#8221; (May not be suitable for work NSFW.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Some/all of our pages require visitors to scroll horizontally.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses Java navigation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Navigation graphics are not the same size and/or color.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;On our site, you may have to click four or more times to get to the information you want.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We keep people from signing up for expensive conferences. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h3&gt;Content&lt;o:p&gt;&lt;/o:p&gt;&lt;/h3&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t know what content is popular.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our content is not organized to meet our visitors&amp;#8217; needs.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our content is not broken down into logical categories.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The content is not understandable by humans and is full of marketing-speak, or jargon, or unexplained acronyms.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The content is not engaging, or relevant, or accurate, or fair and impartial.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;I don&amp;#8217;t know if our content is appropriate for our audience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;The content really isn&amp;#8217;t appropriate for our audience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t identify non-HTML documents like PowerPoint or Excel. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s content is not written for the web, but for print media (or other media) and we just transferred it to the web. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s content is written at a higher or lower readability level than our visitors&amp;#8217; knowledge level.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our pages are too long. We forget that people skim.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t have Heroin Content.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Some of our site&amp;#8217;s content &amp;#8212; graphics and/or text &amp;#8212; is considered offensive. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Some of our content &amp;#8212; graphics and/or text is considered racially or politically incorrect. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Some of our content &amp;#8212; graphics and/or text &amp;#8212; is considered offensive to international audiences. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We didn&amp;#8217;t hire editor to proofread spelling, grammar, capitalization and content. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We haven&amp;#8217;t checked to see we&amp;#8217;ve eliminated all &amp;#8220;Lorem ipsum&amp;#8221; text or other placeholder text and graphics from site &amp;#8212; especially from document titles. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses content that our visitors don&amp;#8217;t need to know. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site may contain sensitive information the public and/or competitors shouldn&amp;#8217;t see.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has a mission statement or a link to a mission statement on the front page (non-profit&amp;#8217;s are exempt).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has sections that are under construction and the public can access them.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has different looks on different pages or sections.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t have a privacy or legal statement page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s content came from Microsoft Word, Powerpoint, etc., documents and then converted to HTML.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has outdated calendar information.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has too many words on a line, making it hard to read.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has too few words on a line, making it frustrating to read.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h1&gt;Checklist 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/h1&gt;  &lt;h2&gt;&amp;#8220;How long can you French kiss before it&amp;#8217;s a mortal sin?&amp;#8221; or &amp;#8220;How many web design mistakes can I make before our site sucks?&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;h2&gt;82 Potential Mortal Sins&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;You have to be born into the Roman Catholic church to truly appreciate the first question &amp;#8212; pre-Vatican II Catholics will understand it best. Back in eighth grade one of my male classmates at St. Andrew&amp;#8217;s School asked, in all seriousness, the above question. The question has stayed with me for forty years. The answer escapes me.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Non-Catholics will still appreciate the question. Basically, it&amp;#8217;s the same question they ask Google&amp;#8217;s Matt Cutts (except they don&amp;#8217;t phrase it as honestly): &amp;#8220;How many stupid tricks can I pull trying to get my site to the top of Google&amp;#8217;s rankings before you punish my site?&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;The mistakes in Checklist 1 are fatal. I&amp;#8217;m not sure how many of the mistakes in Checklist 2 you can make before you kill your web site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;&lt;a name=seo id=seo&gt;&lt;/a&gt;Special Note: Search Engine Optimization&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;One of the areas I skipped is Search Engine Optimization and web design &amp;#8212; mostly because many factors aren&amp;#8217;t design related. One of the best sites for all things search related is WebmasterWorld and a good friend of mind informed me they recently had an incredibly fascinating discussion entitled &amp;#8220;25 Signals of Crap.&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;While many items mentioned are found on my two checklists, they frame them in the context of Google and advertising. You really need to read this forum discussion.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;Checklist 2:&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p class=MsoNormal&gt;Our site isn&amp;#8217;t accessible to visitors with physical disabilities.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t use white or off-white color for background.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t use black text.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses Frames.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses the wrong doctype.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t use CSS. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses CSS, but it&amp;#8217;s inline CSS. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our sites logo is not at top left corner. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has no search engine. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our search engine is not at top-right of page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s search engine box isn&amp;#8217;t long enough for visitors to see what they&amp;#8217;re typing. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has a search engine, but not on every page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Underlined text is not link text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses invalid HTML attributes (marginwidth, etc.). &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses graphics as links. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We haven&amp;#8217;t validated our site&amp;#8217;s HTML code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We haven&amp;#8217;t validated our site&amp;#8217;s CSS. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We haven&amp;#8217;t checked to see if our site&amp;#8217;s links are broken. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses deprecated markup (like the CENTER tag).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t use a style switcher.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We haven&amp;#8217;t checked to see how our site looks in grayscale.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We haven&amp;#8217;t checked our site using the Firefox plugin &amp;#8220;Web Developer&amp;#8221;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We haven&amp;#8217;t checked our site using the &amp;#8220;The Web Page Analyzer&amp;#8221;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses the CSS hover attribute on text. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t optimize our site&amp;#8217;s CSS or HTML files. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s accounting figures don&amp;#8217;t line up on the decimal point. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s logo is disproportionate for top screen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Corporate logo is not at top left of screen.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Logo links to home page on sub-pages.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;There are links to the home page on every page &amp;#8212; but the home page. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Putting dates on material that&amp;#8217;s not updated regularly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s content is full of jargon.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s content is full of acronyms.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s use of abbreviations is inconsistent.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t use a consistent tone throughout. We switch back and forth from colloquial to clinical etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our font sizes are fixed and can&amp;#8217;t be resized.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We put more than one idea in a paragraph.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Not declaring a background color.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses unencoded ampersands. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site is &amp;lt;span&amp;gt; and/or &amp;lt;div&amp;gt; happy.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Hit counters.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Contact information is not available. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t provide multiple methods to be contacted. (Contact Us form, phone number, address, e-mail, etc.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use dates and times on a site that&amp;#8217;s not about dates and times.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has pictures of boring white executives.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has pictures of boring white executives &amp;#8212; and if you click the picture, you get to see them up close and personal.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Some of our pictures are not recent &amp;#8212; we have a 20 year-old photo of some employees.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses JPG when it should use GIF images and vice-versa.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use SVG file format because we can.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We over-optimize our images.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has graphics that look like a link, but aren&amp;#8217;t.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t check to see if scanned images are scanned on dirty scanners.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Check on an outside machine if all your sites&amp;#8217; graphics actually load. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;There&amp;#8217;s no reason for a globe image. We get that you&amp;#8217;re global. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses an ugly background image. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use Dynamic HTML navigation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t have a site map.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We have a site map, but it&amp;#8217;s graphics based.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses liquid design.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses fixed-width design. (You can&amp;#8217;t win. Liquid is wrong on wide-screen monitors because you have line lengths that are hard to read &amp;#8212; and vice versa.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We use table borders on content other than accounting-type data. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;OUR HEADINGS ARE CAPITALIZED. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our text is full of superlatives like &amp;#8220;This product will solve every problem you have.&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our paragraphs have too much text. (We&amp;#8217;re a web of scanners.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site bolds a lot of text.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site italicizes a lot of text.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site&amp;#8217;s font sizes are fixed and can&amp;#8217;t be resized.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses three or more font faces on a page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t have a CSS file for printing pages.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t use logical file names for documents or graphics.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site uses graphics that don&amp;#8217;t enhance the page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our graphics and text don&amp;#8217;t match up.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Some of our documents run across multiple pages, but we don&amp;#8217;t give the option to see it all on one page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Back button doesn&amp;#8217;t go back because we&amp;#8217;ve disabled it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t provide a feedback mechanism.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our forms mix up checkboxes and radio buttons.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site has pull-down (drop list) menus.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t use bullets to organize information.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;We don&amp;#8217;t manually spell check TITLE, ALT tags, etc. (spell checkers don&amp;#8217;t check these).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our content is not timely.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our content is not updated frequently.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;Our site doesn&amp;#8217;t separate style from content.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h1&gt;OK, My Web Site Sucks. What Do I Do Now?&lt;o:p&gt;&lt;/o:p&gt;&lt;/h1&gt;  &lt;p&gt;&lt;a href="http://www.webpagesthatsuck.com/top-30-web-design-mistakes.html"&gt;&lt;br&gt; &lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;The answer to this question is the same one as the joke about the guy who goes to the doctor&amp;#8217;s office and says &amp;#8220;It hurts when I raise my arm.&amp;#8221; The doctor replies, &amp;#8220;Don&amp;#8217;t raise your arm.&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;When I&amp;#8217;m training or giving a speech, I tell the audience, &amp;#8220;The most important thing you can do to improve your web site is eliminate unnecessary design items.&amp;#8221;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Everything you&amp;#8217;ve checked isn&amp;#8217;t necessary. Eliminate these mistakes and you&amp;#8217;re on your way to an improved web site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Elimnation isn&amp;#8217;t the whole solution. If you eliminated the mistakes on certain web sites, there wouldn&amp;#8217;t be much left.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;If you didn&amp;#8217;t check your sites against the online programs in the introduction, here they are again. Use them as a start to fix your site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;After You Complete the Checklists&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;While validating/checking your site against the following tools won&amp;#8217;t guarantee your site isn&amp;#8217;t ineffective, you won&amp;#8217;t have to answer certain questions with a check mark.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your page&amp;#8217;s HTML at &lt;a href="http://validator.w3.org/" target="_blank"&gt;http://validator.w3.org&lt;/a&gt;. Fix your mistakes &amp;#8212; or as many as you can.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your page&amp;#8217;s/site&amp;#8217;s CSS at &lt;a href="http://jigsaw.w3.org/css-validator/" target="_blank"&gt;http://jigsaw.w3.org/css-validator/&lt;/a&gt;. Fix your mistakes &amp;#8212; or as many as you can.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your links at &lt;a href="http://validator.w3.org/checklink" target="_blank"&gt;http://validator.w3.org/checklink&lt;/a&gt;. Fix your mistakes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your images for accessibility issues at &lt;a href="http://juicystudio.com/services/image.php" target="_blank"&gt;http://juicystudio.com/services/image.php&lt;/a&gt;. Fix your mistakes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your content for readability at &lt;a href="http://juicystudio.com/services/readability.php" target="_blank"&gt;http://juicystudio.com/services/readability.php&lt;/a&gt;. Make sure your content is not too &amp;#8220;smart&amp;#8221; for your audience.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check to see if your text and background colors have sufficient contrast at &lt;a href="http://juicystudio.com/services/colourcontrast.php" target="_blank"&gt;http://juicystudio.com/services/colourcontrast.php&lt;/a&gt;. Fix your colors.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check to see if your CSS&amp;#8217;s text and background colors have sufficient contrast at &lt;a href="http://www.accesskeys.org/tools/color-contrast.html" target="_blank"&gt;http://www.accesskeys.org/tools/color-contrast.html&lt;/a&gt;. Fix your colors.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check to see how your page looks to the colorblind at &lt;a href="http://www.q42.nl/demos/colorblindnesssimulator/colors.html" target="_blank"&gt;http://www.q42.nl/demos/colorblindnesssimulator/colors.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your site on &lt;a href="http://www.instantposition.com/" target="_blank"&gt;http://www.instantposition.com&lt;/a&gt; for the first 5 keywords you use to describe your site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your page&amp;#8217;s content accessibility using Cynthia Says at &lt;a href="http://www.cynthiasays.com/" target="_blank"&gt;http://www.cynthiasays.com/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check your page&amp;#8217;s performance and web page speed at &lt;a href="http://www.websiteoptimization.com/services/analyze/" target="_blank"&gt;http://www.websiteoptimization.com/services/analyze/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Check that your page/site looks the same in over &lt;a href="http://www.vincentflanders.com/browsercam.jpg" target="_blank"&gt;80 different browser&lt;/a&gt; combinations at &lt;a href="http://www.browsercam.com/" target="_blank"&gt;BrowserCam&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;Addendum: The Problem With Checklists&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;There are a lot of checklists about good and bad web design and the problem with them is simple &amp;#8212; they&amp;#8217;re vague. Two examples from a checklist touting a $10,000 seminar on improving your web site were:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Is essential content available where needed?&lt;br&gt; Is the text legible?&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Your natural reaction is going to be either &amp;#8220;Yes&amp;#8221; or &amp;#8220;No&amp;#8221; because they&amp;#8217;re vaguely phrased. If I asked you &amp;#8220;Is your site&amp;#8217;s text right justified and if it is, then your site sucks,&amp;#8221; you could definitively answer the question and know where you stand. I&amp;#8217;ve also just saved you $10,000.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;I hope these two checklists will the be-all and end-all of web design checklists.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;Hey! You May Not Have to Fill Out The Checklist!&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;If your site is for:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;a movie&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;a movie company&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;a musical band&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;a record label&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;an art site&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;an experimental site&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;a game company&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;an individual game&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;a personal web site&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&amp;#8230;then you can skip these checklists because your site isn&amp;#8217;t real.&lt;/strong&gt; By &amp;#8220;real&amp;#8221; I mean your site conveys information or is selling products. You have a site where people are held accountable.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;What Wasn&amp;#8217;t Covered&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://www.webpagesthatsuck.com/does-my-web-site-suck/images-bad/we-are-not-covering.jpg" target="_blank"&gt;Click to enlarge&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Planning your web site, determining your target audience, the composition of your target audience, your goals for having a web site, budgeting the money, hiring the people to create/run the site, etc.I&amp;#8217;m not covering any of the pre-planning that should occur before you start your site or start a makeover.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;Note 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;  &lt;p&gt;&lt;strong&gt;There are very few e-commerce and search engine optimization entries. I feel these subjects deserve their own checklist. Obviously, almost anything you do to straighten out your site&amp;#8217;s design will help with optimization. I&amp;#8217;m also fairly light on forms, probably because I&amp;#8217;ve created so few. &lt;/strong&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1890023907027820";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel = "";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8665763284561318907-4893540612666319010?l=rachasatish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rachasatish.blogspot.com/feeds/4893540612666319010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8665763284561318907&amp;postID=4893540612666319010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/4893540612666319010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8665763284561318907/posts/default/4893540612666319010'/><link rel='alternate' type='text/html' href='http://rachasatish.blogspot.com/2009/05/does-your-web-site-suck.html' title='Does Your Web Site Suck?'/><author><name>Satish Kumar Racha</name><uri>http://www.blogger.com/profile/05671767574131890622</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_T16lbthEaJ0/SZfKL4eejtI/AAAAAAAACzw/vTS1XgT_--Y/S220/rachasatish.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8665763284561318907.post-2492025933640751364</id><published>2009-05-01T11:25:00.010+05:30</published><updated>2009-05-01T11:29:00.199+05:30</updated><title type='text'>Excellent Java Performance Tuning</title><content type='html'>&lt;div class=Section1&gt;  &lt;p&gt;&lt;strong&gt;Note that this page is very large. The tips on this page are categorized in other pages. Use &lt;a href="http://www.JavaPerformanceTuning.com/tips/"&gt;the tips index page&lt;/a&gt; to access smaller focused listings of tips.&lt;/strong&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;This page lists many other pages available on the web, together with a condensed list of tuning tips that each page includes. For the most part I've eliminated any tips that are wrong, but one or two may have slipped past me. Remember that &lt;strong&gt;the tuning tips listed are not necessarily good coding practice. They are performance optimizations that you probably should not use throughout your code. Instead they apply to speeding up critical sections of code where performance has already been identified as a problem.&lt;/strong&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;The tips here include only those that are available online for free. I do not intend to summarize any offline resources (such as the various books available including mine, &lt;a href="http://www.oreilly.com/catalog/javapt/"&gt;Java Performance Tuning&lt;/a&gt;). The tips here are of very variable quality and usefulness, some real gems but some dross and quite a bit of repetition. Comments in square brackets, [], have been added by me. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;Use this page by using your browser's &amp;quot;find&amp;quot; or &amp;quot;search&amp;quot; option to identify particular tips you are interested in on the page, and follow up by reading the referenced web page if clarification is necessary. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;p&gt;This page is currently 411KB. This page is updated once a month. You can receive email notification of any changes by subscribing to the &lt;a href="http://www.JavaPerformanceTuning.com/newsletter.shtml"&gt;newsletter&lt;/a&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;div class=MsoNormal align=center style='text-align:center'&gt;  &lt;hr size=2 width="100%" align=center&gt;  &lt;/div&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/02/22/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2001/02/22/optimization.html&lt;/a&gt;&lt;br&gt; Performance planning for managers (Page last updated February 2001, Added 2001-03-21, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Include budget for performance management. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Create internal performance experts. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Set performance requirements in the      specifications. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Include a performance focus in the analysis. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Require performance predictions from the      design. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Create a performance test environment. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Test a simulation or skeleton system for      validation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Integrate performance logging into the      application layer boundaries. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Performance test the system at multiple scales      and tune using the resulting information &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l224 level1 lfo1'&gt;Deploy the system with performance logging      features. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="ftp://ftp.ora.com/pub/examples/java/javapt/technique-list.html"&gt;ftp://ftp.ora.com/pub/examples/java/javapt/technique-list.html&lt;/a&gt;&lt;br&gt; A long list of most of the tuning techniques covered in my &amp;quot;Java Performance Tuning&amp;quot; book (Page last updated August 2000, Added 2000-10-23, Author Jack Shirazi, Publisher O'Reilly). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l143 level1 lfo2'&gt;[Since the referred to page is already a      summary list, I have not extracted it here. Especially since there are      nearly 300 techniques listed. Check the page out directly]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.html&lt;/a&gt;&lt;br&gt; Comparing the performance of LinkedLists and ArrayLists (and Vectors) (Page last updated May 2001, Added 2001-06-18, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;ArrayList is faster than Vector except when      there is no lock acquisition required in HotSpot JVMs (when they have      about the same performance). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;Vector and ArrayList implementations have      excellent performance for indexed access and update of elements, since      there is no overhead beyond range checking. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;Adding elements to, or deleting elements from      the end of a Vector or ArrayList also gives excellent performance except      when the capacity is exhausted and the internal array has to be expanded. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;Inserting and deleting elements to Vectors and      ArrayLists always require an array copy (two copies when the internal      array must be grown first). The number of elements to be copied is      proportional to [size-index], i.e. to the distance between the      insertion/deletion index and the last index in the collection. The array      copying overhead grows significantly as the size of the collection      increases, because the number of elements that need to be copied with each      insertion increases. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;For insertions to Vectors and ArrayLists, inserting      to the front of the collection (index 0) gives the worst performance,      inserting at the end of the collection (after the last element) gives the      best performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;LinkedLists have a performance overhead for      indexed access and update of elements, since access to any index requires      you to traverse multiple nodes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;LinkedList insertions/deletion overhead is      dependent on the how far away the insertion/deletion index is from the      closer end of the collection. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;Synchronized wrappers (obtained from Collections.synchronizedList(List))      add a level of indirection which can have a high performance cost. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;Only List and Map have efficient thread-safe      implementations: the Vector and Hashtable classes respectively. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;List insertion speed is critically dependent on      the size of the collection and the position where the element is to be      inserted. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;For small collections ArrayList and LinkedList      are close in performance, though ArrayList is generally the faster of the      two. Precise speed comparisons depend on the JVM and the index where the      object is being added. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;Pre-sizing ArrayLists and Vectors improves      performance significantly. LinkedLists cannot be pre-sized. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;ArrayLists can generate far fewer objects for      the garbage collector to reclaim, compared to LinkedLists. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;For medium to large sized Lists, the location      where elements are to inserted is critical to the performance of the list.      ArrayLists have the edge for random access. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;A dedicated List implementation designed to      match data, collection types and data manipulation algorithms will always      provide the best performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;ArrayList internal node traversal from the      start to the end of the collection is significantly faster than LinkedList      traversal. Consequently queries implemented in the class can be faster. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l152 level1 lfo3'&gt;Iterator traversal of all elements is faster      for ArrayList compared to Linkedlist. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/07/09/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2001/07/09/optimization.html&lt;/a&gt;&lt;br&gt; Using the WeakHashMap class (Page last updated June 2001, Added 2001-07-20, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;WeakHashMap can be used to reduce memory leaks.      Keys that are no longer strongly referenced from the application will      automatically make the corresponding value reclaimable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;To use WeakHashMap as a cache, the keys that      evaluate as equal must be recreatable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;Using WeakHashMap as a cache gives you less      control over when cache elements are removed compared with other cache      types. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;Clearing elements of a WeakHashMap is a two      stage process: first the key is reclaimed, then the corresponding value is      released from the WeakHashMap. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;String literals and other objects like Class      which are held directly by the JVM are not useful as keys to a WeakHashMap,      as they are not necessarily reclaimable when the application no longer      references them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;The WeakHashMap values are not released until      the WeakHashMap is altered in some way. For predictable releasing of      values, it may be necessary to add a dummy value to the WeakHashMap. If      you do not call any mutator methods after populating the WeakHashMap, the      values and internal WeakReference objects will never be dereferenced [no      longer true from 1.4, where most methods now allow values to be released].      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;WeakHashMap wraps an internal HashMap adding an      extra level of indirection which can be a significant performance      overhead. [no longer true from 1.4]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;Every call to get() creates a new WeakReference      object. [no longer true from 1.4]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;WeakHashMap.size() iterates through the keys,      making it an operation that takes time proportional to the size of the      WeakHashMap. [no longer true from 1.4]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l64 level1 lfo4'&gt;WeakHashMap.isEmpty() iterates through the      collection looking for a non-null key, so a WeakHashMap which is empty      requires more time for isEmpty() to return than a similar WeakHashMap      which is not empty. [no longer true from 1.4, where isEmpty() is now      slower than previous versions]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.oreilly.com/news/jptsummary_1100.html"&gt;http://java.oreilly.com/news/jptsummary_1100.html&lt;/a&gt;&lt;br&gt; &lt;a href="ftp://ftp.ora.com/pub/examples/java/javapt/summary.html"&gt;ftp://ftp.ora.com/pub/examples/java/javapt/summary.html&lt;/a&gt;&lt;br&gt; A high level overview of technical performance tuning, covering 5 levels of tuning competence. (Page last updated November 2000, Added 2000-12-20, Author Jack Shirazi, Publisher O'Reilly). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;Start tuning by examining the application      architecture for potential bottlenecks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;Architecture bottlenecks are often easy to spot:      they are the connecting lines on the diagrams; the single threaded      components; the components with many connecting lines attached; etc. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;Ensure that application performance is      measureable for the given performance targets. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;Ensure that there is a test environment which      represents the running system. This test-bed should support testing the      application at different loads, including a low load and a fully scaled      load representing maximum expected usage. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;After targeting design and architecture, the      biggest bang for your buck in terms of improving performance is choosing a      better VM, and then choosing a better compiler. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;Start code tuning with proof of concept      bottleneck removal: this consists of using profilers to identify      bottlenecks, then making simplified changes which may only improve the      performance at the bottleneck for a specialized set of activities, and      proceeding to the next bottleneck. After tuning competence is gained, move      to full tuning. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;Each multi-user performance test can typically      take a full day to run and analyse. Even simple multi-user performance      tuning can take several weeks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;After the easily idenitified bottlenecks have      been removed, the remaining performance improvements often come mainly      from targeting loops, structures and algorithms. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l47 level1 lfo5'&gt;In running systems, performance should be      continually monitored to ensure that any performance degradation can be      promptly identified and addressed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.oreilly.com/catalog/javapt/chapter/ch04.html"&gt;http://www.oreilly.com/catalog/javapt/chapter/ch04.html&lt;/a&gt;&lt;br&gt; Chapter 4 of &amp;quot;Java Performance Tuning&amp;quot;, &amp;quot;Object Creation&amp;quot;. (Page last updated September 2000, Added 2000-10-23, Author Jack Shirazi, Publisher O'Reilly). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Establish whether you have a memory problem. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Reduce the number of temporary objects being used,      especially in loops. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Avoid creating temporary objects within      frequently called methods. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Presize collection objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Reuse objects where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Empty collection objects before reusing them. (Do      not shrink them unless they are very large.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use custom conversion methods for converting      between data types (especially strings and streams) to reduce the number      of temporary objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Define methods that accept reusable objects to be      filled in with data, rather than methods that return objects holding that      data. (Or you can return immutable objects.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Canonicalize objects wherever possible. Compare      canonicalized objects by identity. [Canonicalizing objects means having      only a single reference of an object, with no copies possible]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Create only the number of objects a class      logically needs (if that is a small number of objects). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Replace strings and other objects with integer      constants. Compare these integers by identity. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use primitive data types instead of objects as      instance variables. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Avoid creating an object that is only for      accessing a method. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Flatten objects to reduce the number of nested      objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Preallocate storage for large collections of      objects by mapping the instance variables into multiple arrays. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;StringBuffer&lt;/span&gt;&lt;/code&gt;      rather than the string concatenation operator (+). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use methods that alter objects directly without      making copies. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Create or use specific classes that handle      primitive data types rather than wrapping the primitive data types. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Consider using a &lt;code&gt;&lt;span style='font-size:      10.0pt'&gt;ThreadLocal&lt;/span&gt;&lt;/code&gt; to provide threaded access to singletons      with state. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use the &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;final&lt;/span&gt;&lt;/code&gt;      modifier on instance-variable definitions to create immutable internally      accessible objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;WeakReference&lt;/span&gt;&lt;/code&gt;s      to hold elements in large canonical lookup tables. (Use &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;SoftReference&lt;/span&gt;&lt;/code&gt;s for cache elements.)      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Reduce object-creation bottlenecks by targeting      the object-creation process. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Keep constructors simple and inheritance      hierarchies shallow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Avoid initializing instance variables more than      once. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use the &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;clone()&lt;/span&gt;&lt;/code&gt;      method to avoid calling any constructors. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Clone arrays if that makes their creation faster.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Create copies of simple arrays faster by      initializing them; create copies of complex arrays faster by cloning them.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Eliminate object-creation bottlenecks by moving      object creation to an alternative time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Create objects early, when there is spare time in      the application, and hold those objects until required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use lazy initialization when there are objects or      variables that may never be used, or when you need to distribute the load      of creating objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l1 level1 lfo6'&gt;Use lazy initialization only when there is a      defined merit in the design, or when identifying a bottleneck which is      alleviated using lazy initialization. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.oreilly.com/news/javaperf_0900.html"&gt;http://java.oreilly.com/news/javaperf_0900.html&lt;/a&gt;&lt;br&gt; My article on basic optimizations for queries on collections (Page last updated September 2000, Added 2000-10-23, Author Jack Shirazi, Publisher O'Reilly). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Use short-circuit boolean operators instead of      the normal boolean operators. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Eliminate any unnecessarily repeated method      calls from loops. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Eliminate unnecessary casts. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Avoid synchronization where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Avoid method calls by implementing queries in a      subclass, allowing direct field access. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Use temporary local variables to manipulate      data fields (instance/class variables). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Use more precise object typing where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l284 level1 lfo7'&gt;Before manual tuning, HotSpot VMs are often      faster than JIT VMs. But JIT VMs tend to benefit more from manual tuning      and can end up faster than HotSpot VMs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-11-2000/jw-1117-optimize.html"&gt;http://www.javaworld.com/javaworld/jw-11-2000/jw-1117-optimize.html&lt;/a&gt;&lt;br&gt; Article about optimizing queries on Maps. (Page last updated November 2000, Added 2000-12-20, Author Jack Shirazi, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;Avoid using synchronization in read-only or      single-threaded queries. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;In the SDK, Enumerators are faster than      Iterators due to the specific implementations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;Eliminate repeatedly called methods where      alternatives are possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;Iterator.hasNext() and      Enumerator.hasMoreElements() do not need to be repeatedly called when the      size of the collection is known. Use collection.size() and a loop counter      instead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;Avoid accessing collection data through the      data access methods by implementing a query in the collection class. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;Elminate repeated casts by casting once and      holding the cast item in a correctly typed variable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;Reimplement the collection class to specialize      for the data being held in the collection. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l305 level1 lfo8'&gt;Reimplment the Map class to use a hash function      which is more efficient for the data being mapped. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/01/25/hash_functions.html"&gt;http://www.onjava.com/pub/a/onjava/2001/01/25/hash_functions.html&lt;/a&gt;&lt;br&gt; Optimizing hash functions: generating a perfect hash function (Page last updated January 2001, Added 2001-02-21, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l76 level1 lfo9'&gt;&lt;em&gt;&lt;span style='font-family:"Calibri","sans-serif"'&gt;perfect&lt;/span&gt;&lt;/em&gt;      hash functions guarantee that every key maps to a separate entry in a      hashtable, and so provide more efficient hastable implementations than      generic hash functions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l76 level1 lfo9'&gt;&lt;em&gt;&lt;span style='font-family:"Calibri","sans-serif"'&gt;perfect&lt;/span&gt;&lt;/em&gt;      hash functions are possible when the key data is restricted to a known set      of elements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l76 level1 lfo9'&gt;Optimize Map implementations by specializing the      types of internal datastructures, and method parameter types and return      types. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l76 level1 lfo9'&gt;Optimize Map implementations by using a      specialized hash function that is optimized for the key type, rather than      generic to all possible types of keys. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l76 level1 lfo9'&gt;Generate a perfect hash function using some      variable combination of simple arithmentic operators. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l76 level1 lfo9'&gt;Perfect hash functions may require excessive      amounts of memory. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l76 level1 lfo9'&gt;Minimal perfect hash maps do not require any      excess memory, but may impose significant overheads on the map. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2002/03/20/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2002/03/20/optimization.html&lt;/a&gt;&lt;br&gt; Microtuning (Page last updated March 2002, Added 2002-03-25, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Performance is dependent on data as well as      code. Different data can make identical code perform very differently. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Always start tuning with a baseline      measurement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;The System.currentTimeMillis() method is the      most basic measuring tool for tuning. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;You may need to repeatedly call a method in      order to reliably measure its average execution time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Minimize the possibility that CPU time will be      allocated to anything other than the test while it is running by ensuring      no other processes are runing during the test, and that the test remains      in the foreground. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Baseline measurements normally show some      useful information, e.g. the average execution time for one call to a      method. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Multiplying the average time taken to execute      a method or sequence of methods, by the number of times that sequence will      be called in a time period, gives you an estimate of the fraction of the      total time that the sequence takes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;There are three routes to tuning a method:      Consider unexpected differences in different test runs; Analyze the      algorithm; Profile the method. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Creating an exception is a costly procedure,      because of filling in stack trace. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;A profiler should ideally be able to take a      snapshot of performance between two arbitrary points. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Tuning is an iterative process: you normally      find one bottleneck, make changes that improve performance, test those      changes, and then start again. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Algorithm changes usually provide the best      speedup, but can be difficult to find. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Examining the code for the causes of the      differences in speed between two variations of test runs can be useful,      but is restricted to those tests for which you can devise alternatives      that show significant timing variations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Profiling is always an option and almost      always provides something that can be speeded up. But the law of diminishing      returns kicks in after a while, leaving you with bottlenecks that are not      worth speeding up, because the potential speedup is too small for the      effort required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Generic integer parsing (as with the Integer      constructors and methods) may be overkill for converting simple integer      formats. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Simple static methods are probably best left      to be inlined by the JIT compiler rather than by hand. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;String.equals() is expensive if you are only      testing for an empty string. It is quicker to test if the length of the      string is 0. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;Set a target speedup to reach. With no target,      tuning can carry on for much longer than is needed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l170 level1 lfo10'&gt;A generic tuning procedure is: Identify the      bottleneck; Set a performance target; Use representative data; Measure the      baseline; Analyze the method; Test the change; Repeat. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2000/12/15/formatting_doubles.html"&gt;http://www.onjava.com/pub/a/onjava/2000/12/15/formatting_doubles.html&lt;/a&gt;&lt;br&gt; Efficiently formatting doubles (Page last updated December 2000, Added 2000-12-20, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l110 level1 lfo11'&gt;Double.toString(double) is slow. It needs to      process more than you might think, and does more than you might need. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l110 level1 lfo11'&gt;Proprietary conversion algorithms can be significantly      faster. One such algorithm is presented in the article. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l110 level1 lfo11'&gt;Converting integers to strings can also be      faster than the SDK. An algorithm successively stripping off the highest      is used in the article. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l110 level1 lfo11'&gt;Formatting numbers using java.text.DecimalFormat      is always slower than Double.toString(double), because it first calls      Double.toString(double) then parses and converts the result. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l110 level1 lfo11'&gt;Formatting using a proprietary conversion      algorithm can be faster than any of the methods discussed so far, if the      number of digits being printed is not large. The actual time taken depends      on the number of digits being printed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/09/25/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2001/09/25/optimization.html&lt;/a&gt;&lt;br&gt; Multiprocess JVMs (Page last updated September 2001, Added 2001-10-22, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l290 level1 lfo12'&gt;Using or implementing a multiprocess framework      to combine Java processes into one JVM can save on memory space overheads      and reduce startup time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/12/05/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2001/12/05/optimization.html&lt;/a&gt;&lt;br&gt; Measuring JDBC performance (Page last updated December 2001, Added 2001-12-26, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l244 level1 lfo13'&gt;Effectively profiling distributed applications      can be difficult. I/O can show up as significant in profiling, simply      because of the nature of a distributed application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l244 level1 lfo13'&gt;It can be unclear whether threads blocking on      reads and writes are part of a significant bottleneck or simply a side      issue. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l244 level1 lfo13'&gt;When profiling, it is usually worthwhile to      have separate measurements available for the communication subsystems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l244 level1 lfo13'&gt;Wrapping the JDBC classes provides an      effective technique for measuring database calls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l244 level1 lfo13'&gt;[Article discusses how to create JDBC wrapers      to measure the performance of database calls]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l244 level1 lfo13'&gt;If more than a few rows of a query are being      read, then the ResultSet.next() method can spend a significant amount of      time fetching rows from the database, and this time should be included in      measurements of database access. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l244 level1 lfo13'&gt;JDBC wrappers are simple and robust, and      require very little alteration to the application using them (i.e, are low      maintenance), so they are suitable to be retained within a deployed      application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/08/22/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2001/08/22/optimization.html&lt;/a&gt;&lt;br&gt; Catching OutOfMemoryErrors (Page last updated August 2001, Added 2001-10-22, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l120 level1 lfo14'&gt;-Xmx and -Xms (-mx and -ms) specify the heap      max and starting sizes. Runtime.totalMemory() gives the current process      size, Runtime.maxMemory() (available from SDK 1.4) gives the -Xmx value. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l120 level1 lfo14'&gt;Repeatedly allocating memory by creating      objects and holding onto them will expand the process to its maximum      possible size. This technique can also be used to flush memory. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l120 level1 lfo14'&gt;If a process gets too large, the operating      system will start paging the process causing a severe decrease in      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l120 level1 lfo14'&gt;It is reasonable to catch the OutOfMemoryError      if you can restore your application to a known state that can proceed with      processing. For example, daemon service threads can often do this. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/10/23/optimization.html"&gt;http://www.onjava.com/pub/a/onjava/2001/10/23/optimization.html&lt;/a&gt;&lt;br&gt; The RandomAccess interface. (Page last updated October 2001, Added 2001-11-27, Author Jack Shirazi, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l93 level1 lfo15'&gt;A java.util.List object which implements RandomAccess      should be faster when using List.get() than when using Iterator.next(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l93 level1 lfo15'&gt;Use &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;instanceof      RandomAccess&lt;/span&gt;&lt;/code&gt; to test whether to use List.get() or      Iterator.next() to traverse a List object. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l93 level1 lfo15'&gt;[Article describes how to guard the test to support      all versions of Java]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.cs.berkeley.edu/%7Emdw/proj/java-nbio/"&gt;http://www.cs.berkeley.edu/~mdw/proj/java-nbio/&lt;/a&gt;&lt;br&gt; Whoopee!! A non-blocking I/O library for Java. This is the single most important functionality missing from the SDK for scalable server applications. The important class is SelectSet which allows you to multiplex all your i/o streams. If you want a scalable server and can use this class then DO SO. &lt;em&gt;NOTE THAT SDK 1.4 WILL INCLUDE NON_BLOCKING I/O&lt;/em&gt; (Page last updated March 2001, Added 2001-01-19, Author Matt Welsh, Publisher Welsh). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l177 level1 lfo16'&gt;[The system select(2)/poll(2) functions allow      you to take any collection of i/o streams and ask the operating system to      check whether any of them can execute read/write/accept without blocking.      The system call will block if requested until any one of the i/o streams      is ready to execute. Before Java, no self-respecting server would sit on      multiple threads in blocked i/o mode, wasting thread resources: instead      select/poll would have been used.] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.cs.cmu.edu/%7Ejch/java/optimization.html"&gt;http://www.cs.cmu.edu/~jch/java/optimization.html&lt;/a&gt;&lt;br&gt; For years, Jonathan Hardwick's old but classic site was the only coherent Java performance tuning site on the web. He built it while doing his PhD. It wasn't updated beyond March 1998, when he moved to Microsoft, but most tips are still useful and valid. The URL is for the top page, there are another eight pages. Thanks Jonathan. (Page last updated March 1998, Added 2000-10-23, Author Jonathan Hardwick, Publisher Hardwick). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Don't optimize as you go. Write your program      concentrating on clean, correct, and understandable code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use profiling to find out where that 80% of      execution time is going, so you know where to concentrate your effort. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Always run &amp;quot;before&amp;quot; and      &amp;quot;after&amp;quot; benchmarks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use the right algorithms and data structures. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Compile with optimization flag, javac -O. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use a JIT. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Multithread for multi-processor machines. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use clipping to reduce the amount of work done      in repaint() &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use double buffering to improve perceived      speed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use image strips or compression to speed up      downloading times. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;&lt;a      href="http://www.javaworld.com/javaworld/jw-03-1996/jw-03-animation.html"&gt;Animation      in Java Applets&lt;/a&gt; from JavaWorld and &lt;a      href="http://java.sun.com/books/Series/Tutorial/ui/drawing/animation.html"&gt;Performing      Animation&lt;/a&gt; from Sun are two good tutorials. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use high-level primitives; it's much faster to      call drawPolygon() on a bunch of points than looping with drawLine(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;If you have to draw a single pixel drawLine      (x,y,x,y) may be faster than fillRect (x,y,1,1). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use Buffered I/O classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Avoid synchronized methods if you can. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Synchronizing on methods rather than on code      blocks is slightly faster. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use exceptions only where you really need      them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use StringBuffer instead of +. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use System.arraycopy() and any other optimized      API's available from the SDK. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Replace the generic standard classes with      faster implementations specific to the application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Create subclasses to override methods with      faster versions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Avoid expensive constructs and data      structures, e.g. one-dimensional array is faster than a two-dimensional      array. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use the faster switch bytecode. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use private and static methods, and final classes,      to encourage inlining by the compiler. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Reuse objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Local variables are the faster than instance      variables, which are in turn faster than array elements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;ints are the fastest data type. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Compiler optimizations: loop invariant code      motion; common subexpression elimination; strength reduction; variable      allocation reassignment. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use java -prof or other profiler. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use a timing harness to run benchmarks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use a memory measurement harness to run      benchmarks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Call system.gc() before every timing run to minimize      inconsistent results due to garbage collection in the middle of a run. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;Use JAR or zip files. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l117 level1 lfo17'&gt;If size is a constraint: use SDK classes      wherever possible; inherit whatever possible; put common code in one      place; initialize big arrays at runtime by parsing a string; use short      names; &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.ddjembedded.com/resources/articles/2001/0112g/0112g.htm"&gt;http://www.ddjembedded.com/resources/articles/2001/0112g/0112g.htm&lt;/a&gt;&lt;br&gt; Balancing Network Load with Priority Queues (Page last updated December 2001, Added 2002-02-22, Author Frank Fabian, Publisher Dr. Dobb's). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;Hardware traffic managers redirect user      requests to a farm of servers based on server availability, IP address, or      port number. All traffic is routed to the load balancer, then requests are      fanned out to servers based on the balancing algorithm. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;Popular load-balancing algorithms include:      server availability (find a server with available processing capability);      IP address management (route to the nearest server by IP address); port      number (locate different types of servers on different machines, and route      by port number); HTTP header checking (route by URI or cookie, etc). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;Web hits should cater for handling peak hit      rate, not the average rate. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;You can model hit rates using gaussian      distribution to determine the average hit rate per time unit (e.g. per      second) at peak usage, then a poisson probability gives the probability of      a given number of users simulatneously hitting the server within that time      unit. [Article gives an example with gaussian fitted to peak traffic of      4000 users with a standard deviation of 20 minutes resulting in an average      of 1.33 users per second at the peak, which in turn gives the      probabilities that 0, 1, 2, 3, 4, 5, 6 users hitting the server within one      second as 26%, 35%, 23%, 10%, 3%, 1%, 0.2%. Service time was 53      milliseconds, which means that the server can service 19 hits per second      without the service rate requiring requests being queued.] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;System throughput is the arrival rate divided      by the service rate. If the ratio becomes greater than one, requests      exceed the system capability and will be lost or need to be queued. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;If requests are queued because capacity is      exceeded, the throughput must drop sufficiently to handle the queued      requests or the system will fail (the service rate must increase or      arrival rate decrease). If the average throughput exceeds 1, then the      system will fail. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;Sort incoming requests into different priority      queues, and service the requests according to the priorities assigned to      each queue. [Article gives the example where combining user and automatic      requests in one queue can result in a worst case user wait of 3.5 minutes,      as opposed to less than 0.1 seconds if priority queues are used]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l311 level1 lfo18'&gt;[Note that Java application servers often do      not show a constant service time. Instead the service time often increases      with higher concurrency due to non-linear effects of garbage collection]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://library.cs.tuiasi.ro/programming/java/cutting_edge_java_game_programming/ewtoc.html"&gt;http://library.cs.tuiasi.ro/programming/java/cutting_edge_java_game_programming/ewtoc.html&lt;/a&gt;&lt;br&gt; &amp;quot;Cutting Edge Java Game Programming&amp;quot;. Oldish but still useful intro book to games programming using Java. (Page last updated 1996, Added 2001-06-18, Author Neil Bartlett, Steve Simkin , Publisher Coriolis). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;AWT components are not useful as game actors      (sprites) as they do not overlap well, nor are they good at being moved      around the screen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Celled image files efficiently store an animated      image by dividing an image into a rectangular grid of cells, and      allocating a different animation image to each cell. A sequence of similar      images (as you would have for an animation) will be stored and transferred      efficiently in most image formats. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Examining pixels using PixelGrabber is slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;drawImage() can throw away and re-load images      in response to memory requirements, which can make things slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Pre-load and pre-scale images before using      them to get a smoother and faster display. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;The more actors (sprites), the more time it      takes to draw and the slower the game appears. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Use double-buffering to move actors (sprites),      by redrawing the actor and background for the relevant area. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Redraw speed depends on: how quickly each      object is drawn; how many objects are drawn; how much of each object is      drawn; the total number of drawing operations. You need to reduce some or      all of these until you get to about 30 redraws per second. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Don't draw actors or images that cannot be      seen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;If an actor is not moving then incorporate the      actor as part of the background. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Only redraw the area that has changed, e.g.      the old area where an actor was, and the new area where it is. Redrawing      several small areas is frequently faster than drawing one large area. For      the redraws, eliminate overlapping areas and merge adjacent (close) areas      so that the number of redraws is kept to a minimum. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Put slow and fast drawing requirements in      separate threads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Bounding-box detection can use circles for the      bounding box which requires a simple radii detection. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Load sounds in a background thread. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Make sure you have a throttle control that can      make the game run slower (or pause) when necessary. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;The optimal network topology for network games      depends on the number of users. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;If the cumulative downloading of your applet      exceeds the player?s patience, you?ve lost a customer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;The user interface should always be      responsive. A non-responsive window means you will lose your players. Give      feedback on necessary delays. Provide distractions when unavoidable delays      will be lengthy [more than a few seconds]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Transmission time varies, and is always slow      compared to operations on the local hardware. You may need to decide the      outcome of the action locally, then broadcast the result of the action. This      may require some synchronization resolution. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Latency between networked players can easily      lead to de-synchronized action and player frustration. Displays should      locally simulate remote action as continuing current activities/motions,      until the display is updated. On update, the actual current situation      should be smoothly resolved with the simulated current situation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Sending activity updates more frequently      ensures smoother play and better synchronization between networked      players, but requires more CPU effort and so affects the local display. In      order to avoid adversely affecting local displays, send actvity updates      from a low priority thread. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Discard any out-of-date updates: always use      the latest dated update. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;A minimum broadcast delay of one-third the      average network connection travel time is appropriate. Once you exceed      this limit, the additional traffic can cause more grief than benefit. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Put class files into a (compressed) container      for network downloading. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Avoid repeatedly evaluating invariant      expressions in a loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Take advantage of inlining where possible      (using final, private and static keywords, and compiling with javac -O) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Profile the code to determine the expensive      methods (e.g. using the -prof option) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Use a dissassembler (e.g. like javap) to      determine which of various alternative coding formulations produces      smaller bytecode. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;To reduce the number of class files and their      sizes: use the SDK classes as much as possible; and implement common      functionality in one place only. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;To optimize speed: avoid synchronized methods;      use buffered I/O; reuse objects; avoid unnecessary screen painting. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Raycasting is faster than raytracing.      Raycasting maps 2D data into a 3D world, drawing entire vertical lines      using one ray. Use precalculated values for trignometric and other      functions, based on the angle increments chosen for your raycasting. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;In the absence of a JIT, the polygon drawing      routines fron the AWT are relatively efficient (compared to array      manipulation) and may be faster than texture mapping. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Without texture mapping, walls can be drawn      faster with one call to fillPolygon (rather than line by line). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;An exponential jump search algorithm can be      used to reduce ray casts - by quickly finding boundaries where walls end      (like a binary search, but double increments until your overshoot, then      halving increments from the last valid wall position). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;It is usually possible to increase performance      at the expense of image quality and accuracy. Techniques include reducing      pixel depth or display resolution, field interlacing, aliasing. The key,      however, is to degrade the image in a way that is likely to be      undetectable or unnoticeable to the user. For example a moving player      often pays less attention to image quality than a resting or static player.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;Use information gathered during the rendering      of one frame to approximate the geometry of the next frame, speeding up      its rendering. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l329 level1 lfo19'&gt;If the geometry and content is not too      complicated, binary space partition trees map the view according to what      the player can see, and can be faster than ray casting. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-03-2001/jw-0323-performance.html"&gt;http://www.javaworld.com/javaworld/jw-03-2001/jw-0323-performance.html&lt;/a&gt;&lt;br&gt; Designing remote interfaces (Page last updated March 2001, Added 2001-04-20, Author Brian Goetz, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Remote object creation has overheads: several      objects needed to support the remote object are also created and      manipulated. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Remote method invocations involve a network      round-trip and marshalling and unmarshaling of parameters. This adds      together to impose a significant latency on remote method invocations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Different object parameters can have very      different marshalling and unmarshaling costs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;A poorly designed remote interface can kill a      program's performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Excessive remote invocation network round-trips      are a huge performance problem. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Calling a remote method that returns multiple      values contained in a temporary object (such as a Point), rather than      making multiple consecutive method calls to retrieve them individually, is      likely to be more efficient. (Note that this is exactly the opposite of      the advice offered for good performance of local objects.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Avoid unnecessary round-trips: retrieve several      related items simultaneously in one remote invocation, if possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Avoid returning remote objects when the caller      may not need to hold a reference to the remote object. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;Avoid passing complex objects to remote methods      when the remote object doesn't necessarily need to have a copy of the      object. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;If a common high-level operation requires many      consecutive remote method calls, you need to revisit the class's      interface. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;A naively designed remote interface can lead to      an application that has serious scalability and performance problems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l82 level1 lfo20'&gt;[Article gives examples showing the effect of      applying the listed advice]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.glenmccl.com/jperf/"&gt;http://www.glenmccl.com/jperf/&lt;/a&gt;&lt;br&gt; Glen McCluskey's paper with 30 tuning tips, now free. (Page last updated October 1999, Added 2000-10-23, Author Glen McCluskey, Publisher McCluskey). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Faster algorithms are better. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Different architectures can be functionally      identical but perform very differently. Keep performance in mind at the      design stage. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use the fastest available JVM. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use static variables for fields that only need      to be assigned once. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Reuse objects where reasonable, e.g. nodes of      a linked list. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Inline methods manually where appropriate.      [Better to use a preprocessor]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Keep methods short and simple to make them automatic      inlining candidates. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;&lt;code&gt;&lt;span style='font-size:10.0pt'&gt;final&lt;/span&gt;&lt;/code&gt;      classes can be faster. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Synchronized methods are slower than the      identical non-synchronized one. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Consider using non-synchronized classes and      synchronized-wrappers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Access to private members of inner classes      from the enclosing class goes by a method call even if not intended to. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use StringBuffer instead of the '+' String      concatentation operator. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;char[]&lt;/span&gt;&lt;/code&gt;      arrays directly to create Strings rather than StringBuffers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;'==' is faster than equals(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;intern() Strings to enable identity (==)      comparisons. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Convert strings to char[] arrays to process      characters, rather than accessing characters one at a time using      String.charAt(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Creating Doubles from strings is slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Buffer i/o. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;MessageFormat is slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Reuse objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;File information such as File.length()      requires a system call and can be slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use System.arraycopy() to copy arrays. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;ArrayList is faster than Vector. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Preset array capacity to as large as will be      required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;LinkedList is faster than ArrayList for inserting      elements to the front of the array, but slower at indexed lookup. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Program using interfaces so that the actual      structure can be easily swapped to improve performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use the -g:none option to the javac compiler. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Primitive data wrapper classes (e.g. Integer)      are slower than using the primitive data directly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Null out references when they are no longer      used so that garbage collection can reclaim their space. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use SoftReferences to recycle memory when      required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;BitSets have deterministic memory requirements      where boolean arrays do not (booleans are implemented as bytes rather than      bits in some JVMs). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l252 level1 lfo21'&gt;Use sparse arrays to hold widely spaced      indexable data. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sun.com/solaris/java/wp-java/6.html"&gt;http://www.sun.com/solaris/java/wp-java/6.html&lt;/a&gt;&lt;br&gt; Performance tuning part of a white paper about Java on Solaris 2.6. (Page last updated 2000, Added 2000-10-23, Author ?, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;To profile I/O calls, use a profiler or use      truss and look for read() and write() system calls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Buffer I/O. Tune the buffer size (bigger is      usually better if memory is available). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Use char arrays for all character processing      in loops, rather than using the String or StringBuffer classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Avoid character processing using methods (e.g.      charAt(), setCharAt()) inside a loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Set the initial StringBuffer size to the      maximum string length, if it is known. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;StringTokenizer is very inefficient, and can      be optimized by storing the string and delimiter in a character array instead      of in String, or by storing the highest delimiter character to allow a      quicker check. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Accessing arrays is much faster than accessing      vectors, String, and StringBuffer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Use System.arraycopy() to improve performance.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Vector is convenient to use, but inefficient.      Ensure that elementAt() is not used inside a loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;FastVector is faster than Vector by making the      elementData field public, thus avoiding (synchronized) calls to      elementAt(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Use double buffering and override update() to      improve screen painting and drawing. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Use custom LayoutManagers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Repaint only the damaged regions (use      ClipRect). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;To improve image handling: use MediaTracker;      use your own imageUpdate() method; pre-decode and store the image in an      array - image decoding time is greater than loading time. Pre-decoding      using PixelGrabber and MemoryImageSource should combine multiple images      into one file for maximum speed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Increase the initial heap size from the      1-MByte default with -ms and -mx [-Xms and -Xmx]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Use -verbosegc. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Take size into account when allocating arrays      (for instance, if short is big enough, use it instead of int. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Avoid allocating objects in loops (readLine()      is a common example). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Minimize synchronization. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Polling is only acceptable when waiting for      outside events and should be performed in a &amp;quot;side&amp;quot; thread. Use      wait/notify instead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Move loop invariants outside the loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Make tests as simple as possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Perform the loop backwards (this actually      performs slightly faster than forward loops do). [Actually it is      converting the test to compare against 0 that makes the difference]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Use only local variables inside a loop; assign      class fields to local variables before the loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Move constant conditionals outside loops. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Combine similar loops. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Nest the busiest loop, if loops are      interchangeable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Unroll the loop, as a last resort. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Convert expressions to table Lookups. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Use caching. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;Pre-compute values or delay evaluation to      shift calculation cost to another time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l167 level1 lfo22'&gt;[Also gives information on using Solaris Trace      Normal Format (TNF) utilities for profiling java applications]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javareport.com/html/from_pages/article.asp?id=252"&gt;http://www.javareport.com/html/from_pages/article.asp?id=252&lt;/a&gt;&lt;br&gt; Detailed article on load testing systems (Page last updated January 2001, Added 2001-01-19, Author Himanshu Bhatt, Publisher Java Report). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Internet systems should be load-tested      throughout development. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Load testing can provide the basis for:      Comparing varying architectural approaches; Performance tuning; Capacity      planning. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Initially you should identify the probable      performance and scalability based on the requirements. You should be      asking about: numbers of users/components; component interactions;      throughput and transaction rates; performance requirements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Factor in batch requirements and performance      characteristics of dependent (sub)systems. Note that additional layers,      like security, add overheads to performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Logging and stateful EJB can degrade      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;After the initial identification phase, the      target should be for a model architecture that can be load-tested to      feedback information. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Scalability hotspots are more likely to exist      in the tiers that are shared across multiple client sessions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Performance measurements should be from      presentation start to presentation completion, i.e. user clicks button      (start) and information is displayed (completion). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l339 level1 lfo23'&gt;Use load-test suites and frameworks to perform      repeatable load testing. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.devx.com/free/articles/2000/maso01/maso01-1.asp"&gt;http://www.devx.com/free/articles/2000/maso01/maso01-1.asp&lt;/a&gt;&lt;br&gt; Article on using syslog to track performance across distributed systems (Page last updated December 2000, Added 2001-01-19, Author Brian Maso, Publisher DevX). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l323 level1 lfo24'&gt;Use syslog to log distributed system      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l323 level1 lfo24'&gt;Make sure you instrument distributed systems      so that you do get performance logging. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.as400.ibm.com/developer/java/topics/jdbctips.html"&gt;http://www.as400.ibm.com/developer/java/topics/jdbctips.html&lt;/a&gt;&lt;br&gt; JDBC Performance Tips (targeted at AS/400, but generically applicable) (Page last updated February 2001, Added 2001-03-21, Authors Richard Dettinger and Mark Megerian, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Move to the latest releases of Java as they      become available. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Use prepared statements (PreparedStatement      class) [article provides coded example of using Statement vs.      PreparedStatement]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Note that two database calls are made for each      row in a ResultSet: one to describe the column, the second to tell the db      where to put the data. PreparedStatements make the description calls at      construction time, Statements make them on every execution. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Avoid retrieving unnecessary columns: don't      use &amp;quot;SELECT *&amp;quot;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;If you are not using stored procedures or      triggers, turn off autocommit. All transaction levels operate faster with      autocommit turned off, and doing this means you must code commits. Coding      commits while leaving autocommit on will result in extra commits being      done for every db operation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Use the appropriate transaction level.      Increasing performance costs for transaction levels are: TRANSACTION_NONE;      TRANSACTION_READ_UNCOMMITTED; TRANSACTION_READ_COMMITTED;      TRANSACTION_REPEATABLE_READ; TRANSACTION_SERIALIZABLE. Note that      TRANSACTION_NONE, with autocommit set to true gives access to triggers,      stored procedures, and large object columns. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Store string and char data as Unicode      (two-byte characters) in the database. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Avoid expensive database query functions such      as: getBestRowIdentifier; getColumns; getCrossReference; getExportedKeys;      getImportedKeys; getPrimaryKeys; getTables; getVersionColumns. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Use connection pooling, either explicitly with      your own implementation, or implicitly via a product that supports      connection pooling. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Use blocked fetchs (fetching table data in      blocks), and tailor the block size to reduce calls to the database,      according to the amount of data required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Use batch updates (sending multiple rows to      the database in one call). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Use stored procedures where appropriate. These      benefit by reducing JDBC complexity, are faster as they use static SQL,      and move execution to the server and potentially reduce network trips. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l178 level1 lfo25'&gt;Use the type-correct get() method, rather than      getObject(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.patrick.net/jpt/index.html"&gt;http://www.patrick.net/jpt/index.html&lt;/a&gt;&lt;br&gt; Patrick Killelea's Java performance tips. (Page last updated 1999, Added 2000-10-23, Author Patrick Killelea, Publisher Killelea). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;System.currentTimeMillis may take up to 0.5      milliseconds to execute. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;The architecture and algorithms of your      program are much more important than any low-level optimizations you might      perform. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Tune at the highest level first. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Make the common case fast (Amdahl's advice). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use what you know about the runtime platform      or usage patterns. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Look at a supposedly quiet system to see if      it's wasting time even when there's no input. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Keep small inheritance chains. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use stack (local) variables in preference to      class variables. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Merge classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;drawPolygon() is faster than using drawLine()      repeatedly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Don't create too may objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Reuse objects if possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Beware of object leaks (references to objects      that are never nulled). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Accessor methods increase overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Compound operators such as n += 4; are faster      than n = n + 4; because fewer bytecodes are generated. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Shifting by powers of two is faster than      multiplying. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Multiplication is faster than exponentiation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;int increments are faster than byte or short      increments. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Floating point increments are much slower than      any integral increment. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Memory access from better to worse: local      vars; supersuperclass instance variable; superclass instance var; class      instance var; class static var; array elements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;It can help to copy slower-access vars to fast      local vars if you are going to operate on them repeatedly, as in a loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use networking timeouts, TCP_NODELAY,      SO_TIMEOUT, especially in case of dying DNS servers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Buffer network io. [or read explicitly in      chunks]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Avoid reverse DNS where you can. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use UDP rather than TCP if speed is more      important than accuracy. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use threads. Prioritize threads. Use notify      instead of notifyAll. Use synchronization sparingly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Counting down is often faster than counting      up. [the loop test comparison to 0 is what matters]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Keep synchronized methods out of loops if you      possibly can. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Avoid excessive String manipulation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use String Buffers or Arrays rather than      String. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;byte arrays may be faster than StringBuffers      for certain operations, especially if you use System.arraycopy(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use StringBuffer rather than the + operator. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Watch out for slow fonts, Fonts vary in speed      of rendering. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Keep the paint method small. It will get      called a lot. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Double buffer where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;For some applications that access the date a      lot, it can help to set the local timezone to be GMT, so that no      conversion has to take place. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Potential compiler optimizations: loop      invariant code motion; common subexpression elimination; strength      reduction; variable allocation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Don't turn off native threads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Use .jar files. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Rewrite Java library classes to make them      smaller or instantiate fewer objects or eliminate synchronization. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l175 level1 lfo26'&gt;Install classes locally. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/extra/fullscreen/"&gt;http://java.sun.com/docs/books/tutorial/extra/fullscreen/&lt;/a&gt;&lt;br&gt; Tutorial on the full screen capabilities in the 1.4 release (5 pages plus example pages under the top page) (Page last updated June 2001, Added 2001-06-18, Author Michael Martak, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;The full-screen exclusive mode provides      maximum image display and drawing performance by allowing direct drawing      to the screen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Use      java.awt.GraphicsDevice.isFullScreenSupported() to determine if      full-screen exclusive mode is available. If it is not available,      full-screen drawing can still be used, but better performance will be      obtained by using a fixed size window in normal screen mode. Full-screen      exclusive applications should not be resizable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Turn off decoration using the setUndecorated()      method. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Change the screen display mode (size, depth      and refresh rate), to the best match for your image bit depth and display      size so that scaling and other image alterations can be avoided or      minimized. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Don't define the screen painting code in the      paint() method called by the AWT thread. Define your own rendering loop      for screen drawing, to be executed in any thread other than the AWT      thread. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Use the setIgnoreRepaint() method on your      application window and components to turn off all paint events dispatched      from the operating system completely, since these may be called during      inappropriate times, or worse, end up calling paint, which can lead to      race conditions between the AWT event thread and your rendering loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Do not rely on the update or repaint methods      for delivering paint events. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Do not use heavyweight components, since these      will still incur the overhead of involving the AWT and the platform's      windowing system. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Use double buffering (drawing to an off-screen      buffer, then copying the finished drawing to the screen). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Use page-flipping (changing the video pointer      so that an off-screen buffer becomes the on-screen buffer, with no image      copying required). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Use a flip chain (a sequence of off-screen      buffers which the video pointer successively points to one after the      other). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;java.awt.image.BufferStrategy provides      getDrawGraphics() (to get an off-screen buffer) and show() (to display the      buffer on screen). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Use java.awt.BufferCapabilities to customize      the BufferStrategy for optimizing the performance of your application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;If you use a buffer strategy for      double-buffering in a Swing application, you probably want to turn off      double-buffering for your Swing components, &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Multi-buffering is only useful when the      drawing time exceeds the time spent to do a show. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l155 level1 lfo27'&gt;Don't make any assumptions about performance:      profile your application and identify the bottlenecks first. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.devresource.hp.com/JavaATC/JavaPerfTune/index.html"&gt;http://www.devresource.hp.com/JavaATC/JavaPerfTune/index.html&lt;/a&gt;&lt;br&gt; HP Java tuning site, including optimizing Java and optimizing HPUX for Java. This is the top page, but several useful pages lie off it (tips extracted for inclusion below). Includes a nice &amp;quot;procedure&amp;quot; list for tuning apps, and some useful forms for what you should record while tuning. (Page last updated 2000, Added 2000-10-23, Author ?, Publisher HP). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Have a performance target. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Consider architecture and components for      bottlenecks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Third-party components may have options that      cause bottlenecks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Having debugging turned on can cause      performance problems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Having logging turned on can cause performance      problems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Is the underlying machine powerful enough. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Carefully document any tests and changes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Create a performance baseline. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Make one change at a time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Be careful not to lose a winning tune because      it's hidden by a bad tune made at the same time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Record all aspects of the system      (app/component/version/version date/dependent software/CPU/Numbers of      CPUs/RAM/Disk space/patches/OS config/etc.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Give the JVMs top system priority. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Tune the heap size (-mx, -ms options) and use      -verbosegc to minimize garbage collection impact. A larger heap reduces      the frequency of garbage collection but increases the length of time that      any particular garbage collection takes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Rules of thumbs are: 50% of free space      available after a gc; set the maximum heap size to be 3-4 times the space      required for the estimated maximum number of live objects; set the initial      heap to size a little below the space required for the average data set,      and the maximum value large enough to handle the largest data set;      increase -Xmn for applications that create many short-lived objects [is      -Xmn a standard option?]. [These rules of thumb should only be considered      as starting points. Ultimately you need to tune the VM heap empirically,      i.e. by trial and error]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;You may need to add flags to third party      products running in the JVM to eliminate explicit calls to garbage collect      (VisiBroker has this known problem). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Watch out for bottlenecks introduced from third      party products. Make sure you know and use the options available, many of      which can affect performance (for better or worse). Document the changes      you make so that you will be able to reproduce the performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;computationally intensive applications should      increase the number of CPUs to increase overall system performance and      throughput. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;Be certain that the application's CPU usage is      a factor limiting performance: often, highly contended locks and garbage      collections that are too frequent will make the system look busy, but      little work is done by the application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l89 level1 lfo28'&gt;[Some nice detailed description on how to      profile and analyze application problems, from the HP system and JVM level      at &lt;a      href="http://www.devresource.hp.com/JavaATC/JavaPerfTune/symptoms_solutions.html"&gt;http://www.devresource.hp.com/JavaATC/JavaPerfTune/symptoms_solutions.html&lt;/a&gt;.]      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=671"&gt;http://www.sys-con.com/java/article.cfm?id=671&lt;/a&gt;&lt;br&gt; J2EE Application server performance (Page last updated April 2001, Added 2001-04-20, Author Misha Davidson, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Good performance has sub-second latency      (response time) and hundreds of (e-commerce) transactions per second. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Avoid n-way database joins: every join has a      multiplicative effect on the amount of work the database has to do. The      performance degradation may not be noticeable until large datasets are      involved. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Avoid bringing back thousands of rows of data:      this can use a disproportionate amount of resources. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Cache data when reuse is likely. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Avoid unnecessary object creation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Minimize the use of synchronization. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Avoid using the SingleThreadModel interface      for servlets: write thread-safe code instead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;ServletRequest.getRemoteHost() is very      inefficient, and can take seconds to complete the reverse DNS lookup it      performs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;OutputStream can be faster than PrintWriter.      JSPs are only generally slower than servlets when returning binary data,      since JSPs always use a PrintWriter, whereas servlets can take advantage      of a faster OutputStream. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Excessive use of custom tags may create      unnecessary processing overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Using multiple levels of BodyTags combined      with iteration will likely slow down the processing of the page      significantly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Use optimistic transactions: write to the      database while checking that new data is not be overwritten by using WHERE      clauses containing the old data. However note that optimistic transactions      can lead to worse performance if many transactions fail. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Use lazy-loading of dependent objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;For read-only queries involving large amounts      of data, avoid EJB objects and use JavaBeans as an intermediary to access      manipulate and store the data for JSP access. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Use stateless session EJBs to cache and manage      infrequently changed data. Update the EJB occasionally. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Use a dedicated session bean to perform and      cache all JNDI lookups in a minimum number of requests. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Minimize interprocess communication. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l313 level1 lfo29'&gt;Use clustering (multiple servers) to increase      scalability. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-04-2001/jw-0406-syslog.html"&gt;http://www.javaworld.com/javaworld/jw-04-2001/jw-0406-syslog.html&lt;/a&gt;&lt;br&gt; Using the Syslog class for logging (Page last updated April 2001, Added 2001-04-20, Author Nate Sammons, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l126 level1 lfo30'&gt;Use Syslog to log system performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l126 level1 lfo30'&gt;Logging should not take up a significant      amount of the system's resources nor interfere with its operation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l126 level1 lfo30'&gt;Use &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;static      final boolean&lt;/span&gt;&lt;/code&gt;s to wrap logging statements so that they can      be easily turned off or eliminated. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l126 level1 lfo30'&gt;Beware of logging to slow external channels.      These will slow down logging, and hence the application too. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/technicalArticles/Programming/PerfTuning/"&gt;http://developer.java.sun.com/developer/technicalArticles/Programming/PerfTuning/&lt;/a&gt;&lt;br&gt; Glen McCluskey's article on tuning Java I/O performance. Weak on serialization tuning. (Page last updated March 1999, Added 2000-10-23, Author Glen McCluskey, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Avoid accessing the disk. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Avoid accessing the underlying operating      system. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Avoid method calls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Avoid processing bytes and characters      individually. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Use buffering either at the class level or at      the array level. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Disable line buffering. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;MessageFormat is slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Reuse objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Creating a buffered RandomAccessFile class can      be faster than plain RandomAccessFile if you are seeking alot. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Compression can help I/O, but only sometimes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Use caching to speed I/O. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Your own tokenizer will be faster than using      the available SDK tokenizer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l165 level1 lfo31'&gt;Many java.io.File methods are system calls      which can be slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/technicalArticles/ebeans/ejbperformance/"&gt;http://developer.java.sun.com/developer/technicalArticles/ebeans/ejbperformance/&lt;/a&gt;&lt;br&gt; Designing Entity Beans for Improved Performance (Page last updated March 2001, Added 2001-03-21, Author Beth Stearns, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l111 level1 lfo32'&gt;Remember that every call of an entity bean      method is potentially a remote call. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l111 level1 lfo32'&gt;Designing with one access method per data      attribute should only be used where remote access will not occur, i.e.      entities are guaranteed to be in the same container. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l111 level1 lfo32'&gt;Use a value object which encapsulates all of      an entity's data attributes, and which transfers all the data in one      network transfer. This may result in large objects being transferred      though. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l111 level1 lfo32'&gt;Group entity bean data attributes in subsets,      and use multiple value objects to provide remote access to those subsets. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.bastie.de/resource/res/mjp.pdf"&gt;http://www.bastie.de/resource/res/mjp.pdf&lt;/a&gt; and &lt;a href="http://www.bastie.de/java/mjperformance/contents.html"&gt;http://www.bastie.de/java/mjperformance/contents.html&lt;/a&gt;&lt;br&gt; Performance tuning report in German. Thanks to Peter Kofler for extracting the tips. (Page last updated November 2001, Added 2001-07-20, Author Sebastian Ritter, Publisher Ritter). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Performance optimizations vary in effect on      different platforms. Always test for your platforms. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Reasons not to optimize: can lead to      unreadable source code; can cause new errors; optimizations are often      compiler/JVM/platform dependent; can lose object orientation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Reasons to optimize: application uses too much      memory/processor/I/O; application is unnaceptably slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Don't optimize before you have at least a      functioning prototype and some identified bottlenecks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Try to optimize the design first before      targeting the implementation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Profile applications. Use the 80/20 rull which      suggests that 80% of the work is done in 20% of the code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Target loops in particular. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Monitor running applications to maintain      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Plan and budget for some resources to optimize      the application. Try to have or develop a couple of performance experts. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Specify performance in the project requirements,      and specify seperate performance requirements for the various layers of      the application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Consider the effects of performance at the      analysis stage, and include testing of 3rd party tools. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Use a benchmark harness to make repeatable      performance tests, varying the number of users, data, etc. Use profilers      and logging to measure performance and identify performance problems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Optimize the runtime system if the      optimization does not require alterations to the application design or      implementation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Test various JVMs and choose the optimal JVM. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;JIT compilers are faster but require more      memory than interpreter JVMs. HotSpot can provide better performance and a      faster startup and maintain a relatively low memory requirement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;Design in asynchronous operations so tasks are      not waiting for others to finish when they don't need to. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use the right VM &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use the right threading model (native vs.      green) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use native compilers &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;give more ram to the VM &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;give all ram to short-lived applications to      completely avoid GC &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use alternate/optimizing compilers &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use the right database driver &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use direct JDBC drivers &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;expand all JDK classes into the filesystem to      increase access to classes &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use slot-local variables (1st 128 bit = 4      slots) (applies for interpreters only) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use int &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use Arraylist instead of Vector &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use own Hashtable implementations for      primitives (i.e. int) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use caches &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use object pools &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;avoid remote method calls &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use callbacks to avoid blocking remote method      calls &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use batching for remote method calls &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use the flyweight pattern to reduce object      creation [The flyweight pattern uses a factory instead of 'new' to reuse      objects rather than always create new ones]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use the right access modifier: static &amp;gt;      private &amp;gt; final &amp;gt; protected &amp;gt; public &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use inlining &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use shallow hierarchies (to avoid long      instantiation chains) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use empty default constructors &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use direct variable access (not recommended,      breaks OO) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;mix model with view (not recommended, breaks      OO) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use better algorithms &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;remove redundant code &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;optimize loops &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;unroll loops &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use int as loop counter &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;count/test loops towards 0 &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use Exception terminated loops for long loops &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use constants for expressions with known      results, e.g. replace &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;x = 3; ... (x      does not change) ...; x += 3;&lt;/span&gt;&lt;/code&gt; with &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;x = 3; ... (x does not change) ...; x = 6;&lt;/span&gt;&lt;/code&gt;      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;move code outside loops &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;how to optimize: 1st check for better      algorithms, 2nd optimize loops &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use shift for *2 and /2 &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;do not initialize with default values (0,      null) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use char arrays for mutable Strings &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use arrays instead of collections &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use the &amp;quot;private final&amp;quot; modifier &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use System.arraycopy() to copy arrays &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use Hashtable keys with fast hashcode() &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;do not use Strings as keys for Hashtables &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use new Hashtable() instaed of      Hashtable.clear() for very large Hashtables &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;inspect JDK source &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use methods in order: static &amp;gt; final &amp;gt;      instance &amp;gt; interface &amp;gt; synchronized &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use own specialized methods instead of JDK's      generalized ones &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;avoid synchronization &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;avoid new objects &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;reuse objects &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use the original instead of overloaded      constructors (give default parameters by your own) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;avoid inner classes &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use + for concenating 2 Strings, use      Stringbuffer for concenating more Strings &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use clone to create new objects (instead of      new) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use instance.hashcode() to test for equality      of intances &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use native JDK implemented methods (as      System.arraycopy()) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;avoid Exceptions (use Exceptions only for      cases with probability &amp;lt; 50%, else use error flags) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;combine multiple small try-catchs to one      larger block &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use Streams instead of Readers, use Reader and      Writer only if you need internationalization &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use buffering for io &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use EOFException and ArrayOutOfBoundsException      for terminating io reading loops &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use transient fields to speedup serialisation &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use externalization instead of serialisation &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use multiple threads to increase perceived      performance &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use awt instead of swing for speed &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use swing instead of awt for less memory &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use super.paint() to initially draw something      (i.e. background) to increase perceived performance &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use your own wrapper for primitives (with      setter methods) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use Graphics.drawPolygon() (native      implemented) instead of several Graphics.drawlines(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use low priority threads to initialize graphic      components in the background &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use synchronized blocks instead of      synchronized methods &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;cache (SQL) Statements for DB access &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l203 level1 lfo33'&gt;use PreparedStatements for DB access &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.sun.com/features/2002/03/swinggui.html"&gt;http://java.sun.com/features/2002/03/swinggui.html&lt;/a&gt;&lt;br&gt; Accelerating GUI apps (after 1.4) (Page last updated March 2002, Added 2002-04-26, Author Dana Nourie, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;To add many items to a JComboBox, add them in      one go using a Model on a vector, e.g. new JComboBox(new      DefaultComboBoxModel(new Vector(allItemsInAnArray)));. This generates only      one changed event. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;Perform GUI operations in bulk to minimize the      events generated. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;When initializing or totally replacing the      contents of a model, construct a new one instead of reusing the existing      one to minimize generated events. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;Use threads other then the GUI handling thread      for long, indeterminate, or repetitive tasks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;VolatileImage allows you to create a      hardware-accelerated offscreen image and manage the contents of that      image. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;From 1.4 Swing double-buffers using      VolatileImage hardware acceleration to improve performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;Repaint small regions instead of entire      sections or screens. For instance, when using tables, repaint a single      table cell as needed instead of repainting the entire screen or table. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l261 level1 lfo34'&gt;EventHandler provides support for dynamically      generating event listeners that have a small footprint and can be saved      automatically by the persistence scheme. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/J2METechTips/2002/tt0325.html"&gt;http://developer.java.sun.com/developer/J2METechTips/2002/tt0325.html&lt;/a&gt;&lt;br&gt; MIDP tips (Page last updated March 2002, Added 2002-04-26, Author Eric Giguere, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l78 level1 lfo35'&gt;Make HTTP requests in a background thread. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l78 level1 lfo35'&gt;Use an asynchronous messaging model. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l78 level1 lfo35'&gt;Use WBXML to compress XML messages. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-09-1996/jw-09-indepth.html"&gt;http://www.javaworld.com/javaworld/jw-09-1996/jw-09-indepth.html&lt;/a&gt;&lt;br&gt; Article about avoiding creating objects where possible. (Page last updated 1996, Added 2000-10-23, Author Chuck McManis, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l20 level1 lfo36'&gt;&amp;quot;The mythology surrounding the slowness of      garbage-collected systems is just that, myth. I can show that the number      of instructions executed is the same whether I call malloc() and free() or      I only call malloc() and some other code calls free().&amp;quot; &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l20 level1 lfo36'&gt;Simple designs can easily run through many      unnecessary objects, e.g. data wrapper objects like Integer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l20 level1 lfo36'&gt;Reuse objects where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l20 level1 lfo36'&gt;Use -verbosegc to check the impact of garbage      collection on your application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.sun.com/people/jag/Fallacies.html"&gt;http://java.sun.com/people/jag/Fallacies.html&lt;/a&gt;&lt;br&gt; The Eight Fallacies of Distributed Computing (Page last updated 2000, Added 2002-03-25, Author Peter Deutsch, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l337 level1 lfo37'&gt;The network can fail to deliver at any time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l337 level1 lfo37'&gt;Latency is significant. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l337 level1 lfo37'&gt;Bandwidth is always limited. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-01-2001/jw-0112-performance.html"&gt;http://www.javaworld.com/javaworld/jw-01-2001/jw-0112-performance.html&lt;/a&gt;&lt;br&gt; Article on designing for performance focusing on interfaces (Page last updated January 2001, Added 2001-02-21, Author Brian Goetz, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l296 level1 lfo38'&gt;Avoid excessive object creation: be wary of      object creation inside of tight loops when executing performance-critical      code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l296 level1 lfo38'&gt;Performance-conscious programmers avoid      excessive use of String. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l296 level1 lfo38'&gt;Defining a utility class which is applied to      data required by its constructor means that you must create a new object      for every piece of data to run it on. Instead, do not require data in the      constructor. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l296 level1 lfo38'&gt;Do not force methods to provide arguments with      input in the form that is convenient rather than efficient. For example,      don't require that arguments be passed only as String objects if a byte      array or char array would also be functionally equivalent (try to support      all formats, especially the efficient ones). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l296 level1 lfo38'&gt;Defining a method signature in terms of an      interchange type (the type of object passed from a caller method to the      callee method as an argument) reduces the interface's complexity while      maintaining its flexibility, but sometimes this simplicity comes at the      cost of performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.sun.com/docs/hotspot/PerformanceFAQ.html"&gt;http://java.sun.com/docs/hotspot/PerformanceFAQ.html&lt;/a&gt;&lt;br&gt; HotSpot FAQ (Page last updated August 2000, Added 2001-02-21, Author ?, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;HotSpot has a bunch of startup options that      may help you configure your VM to go faster. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;HotSpot garbage collection parameters can be      tuned with -Xincgc, -XX:NewSize, -XX:MaxNewSize and -XX:SurvivorRatio(and      heap size parameters). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;Sun recommends you no longer use objects pools      [this is rather a sweeping and inappropriate statement. Object pools are      still useful even with HotSpot, but presumably not as often as      previously]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;Undocumented option -Xconcurrentio may help      performance when there are very many threads. It uses a lighter thread      synchronization model. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;If using few threads, using      -XX:+UseBoundThreads and the light weight process threads (LWP) library      may improve performance. LWP threads are scheduled by the JVM, system      threads have kernel scheduling. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;Don't call System.gc(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;Warming loops is no longer necessary from      HotSpot 2.0 (SDK 1.3). HotSpot now supports on-stack-replacement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;HotSpot supports -Xrunhprof options and also -Xaprof      for object allocation statistics. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;Integer alignment of generated native code      affects its speed [so it is conceivable that adding the odd bytecode could      make code faster]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;HotSpot can eliminate &amp;quot;dead      variables&amp;quot; and dead code, i.e. variables that are assigned to but      never used [in isolated code segments]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l206 level1 lfo39'&gt;The generational-GC per object costs varies      depending on the length of life of the object. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.unixsolutions.hp.com/products/java/perf.html"&gt;http://www.unixsolutions.hp.com/products/java/perf.html&lt;/a&gt;&lt;br&gt; A different HP tip page on optimizing Java performance, from the &amp;quot;HP-UX Programmer's Guide for Java&amp;quot;. Gives info on HP system performance monitoring too (Page last updated ?, Added 2000-10-23, Author ?, Publisher HP). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Maximize thread lifetimes and minimize thread      creation/destruction cycles. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Minimize contention for shared resources. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Minimize creation of short-lived objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Use -verbosegc to monitor garbage collection.      Tune the applications to minimize the effects of garbage collections. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Disk I/O should be minimized. Don't do random      I/O to read a file serially (RandomAccessFile class). You should use      buffered I/O. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Complex AWT graphics will slow down your      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Use the most current version of Java. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Use -mx and -ms to tune the heap size [now -Xms      and -Xmx]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l97 level1 lfo40'&gt;Profile the code to find bottlenecks. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.artima.com/designtechniques/hotspot.html"&gt;http://www.artima.com/designtechniques/hotspot.html&lt;/a&gt;&lt;br&gt; Bill Venners on &amp;quot;the right way to optimize&amp;quot; (Page last updated May 1998, Added 2000-10-23, Author Bill Venners, Publisher Artima). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Don't optimize until you know you have a      problem. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Measure the program before and after your      optimization efforts. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Profile the program to isolate the code that      really matters to performance (10 to 20 percent), and just focus your      optimization efforts there. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Try to devise a better algorithm &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Use APIs in a smarter way &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Use standard code optimization techniques such      as strength reduction, common sub-expression elimination, code motion, and      loop unrolling. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Only as a last resort should you sacrifice good      object-oriented, thread-safe design and maintainable code in the name of      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Make methods static wherever possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l36 level1 lfo41'&gt;Avoid creating lots of short-lived objects &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.informit.com/content/index.asp?product_id=%7B11E331A5-5A08-4FFD-B018-2A7E24D0359B%7D"&gt;http://www.informit.com/content/index.asp?product_id={11E331A5-5A08-4FFD-B018-2A7E24D0359B}&lt;/a&gt;&lt;br&gt; Application performance tuning (Page last updated July 2002, Added 2002-07-24, Author Baya Pavliashvili and Kevin Kline, Publisher informIT). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l316 level1 lfo42'&gt;Application performance problems can be caused      and mitigated with any combination of the following areas: Network      topology and throughput; Server hardware configuration; client application      code; middle-tier components; database communication code; database      configuration settings; logical and physical database design; operating      system settings; client hardware; overall application architecture. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l316 level1 lfo42'&gt;Monitor the application. Primary statistics      worth analyzing are: the number of concurrent users; number of      transactions per unit of time; duration of the longest and shortest      transactions; and the average response time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l316 level1 lfo42'&gt;Specify the performance targets. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l316 level1 lfo42'&gt;Consider using &amp;quot;eye candy&amp;quot; to      distract attention during acceptable short waits. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l316 level1 lfo42'&gt;Identify which application tier contains the      bottleneck and fix that. It might be hardware or software; low-level or      architecture. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l316 level1 lfo42'&gt;Prioritize which problems to fix according to      the resources available. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-11-1999/jw-11-performance.html"&gt;http://www.javaworld.com/javaworld/jw-11-1999/jw-11-performance.html&lt;/a&gt;&lt;br&gt; Object management article (Page last updated November 1999, Added 2000-12-20, Author Dennis M. Sosnoski, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Objects have a space overhead in addition to the      space taken by the data held by the object. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Objects have a space overhead in addition to the      space taken by the data held by the object. The overhead is dependent on      the particular JVM, but there is always some. The space overhead is a per      object value, so the percentage of overhead decreases with larger objects.      If you work with large numbers of small objects, you can use a huge amount      of memory simply for overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Different JVMs are optimized for short lived      objects or for long lived objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Object creation and garbage collection have      significant overheads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Providing you're sensible about creating objects      in heavily used code, it's easy to avoid the object churn cycle. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;The easiest way to reduce object creation in      your programs is by using primitive types in place of objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Avoid using wrapper classes (for primitive data      types, e.g. Integer) as they impose extra overheads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;If you're working with a large number of      primitive data types, you can avoid the excessive object overhead of      wrappers by storing and passing values of the underlying primitive types,      and only converting the values into the full objects when necessary for      use with methods in the class libraries. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Avoid convenience classes like Point if you can      manage the underlying data directly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Reuse objects where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Use object pools where this is helpful in      reusing objects, but be careful that the pool implementation does actually      give a performance improvement (dedicated pools within the class can be      significantly faster than abstract pool implementations). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l5 level1 lfo43'&gt;Implement pools so that the pool does not retain      a reference to any allocated object, so that if the object is not returned      to the pool, it can still be garbage collected when finished with (thus      avoiding memory leaks). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://cin.earthweb.com/public/article/0,,10493_1145241,00.html"&gt;http://cin.earthweb.com/public/article/0,,10493_1145241,00.html&lt;/a&gt;&lt;br&gt; Website usability metrics (Page last updated May 2002, Added 2002-07-24, Author Sharon Gaudin, Publisher EarthWeb). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l307 level1 lfo44'&gt;A website must be easy to navigate and have a      quick display and response time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l307 level1 lfo44'&gt;Bad navigation metrics include: abandoned      shopping carts; first time visitors look at one or two pages and      disappear; dead ends require the &amp;quot;back&amp;quot; button; less than 5% buy      something; any broken links. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l307 level1 lfo44'&gt;Good navigation metrics include: three pages      or less from wesbite entry to desired information; no streaming video or Flash      introductions; multiple ways to reach the required information; up to date      search engines; basic compancy and contact info one click away from the      homepage. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://itmanagement.earthweb.com/ecom/article/0,,11952_1370691,00.html"&gt;http://itmanagement.earthweb.com/ecom/article/0,,11952_1370691,00.html&lt;/a&gt;&lt;br&gt; Common issues affecting Web performance (Page last updated June 2002, Added 2002-07-24, Author Drew Robb, Publisher EarthWeb). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;Symptoms of network problems include slow      response times, excessive database table scans, database deadlocks, pages      not available, memory leaks and high CPU usage. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;Causes of performance problems can include the      application design, incorrect database tuning, internal and external      network bottlenecks, undersized or non-performing hardware or Web and      application server configuration errors. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;Root causes of performance problems come      equally from four main areas: databases, Web servers, application servers      and the network, with each area typically causing about a quarter of the      problems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;The most common database problems are      insufficient indexing, fragmented databases, out-of-date statistics and      faulty application design. Solutions include tuning the index, compacting      the database, updating the database and rewriting the application so that      the database server controls the query process. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;The most common network problems are      undersized, misconfigured or incompatible routers, switches, firewalls and      load balancers, and inadequate bandwidth somewhere along he communication      route. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;The most common application server problems are      poor cache management, unoptimized database queries, incorrect software      configuration and poor concurrent handling of client requests. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;The most common web server problems are poor      design algorithms, incorrect configurations, poorly written code, memory      problems and overloaded CPUs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;Having a testing environment that mirrors the      expected real-world environment is very important in achieving good      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l12 level1 lfo45'&gt;The deployed system needs to be tested and      continually monitored. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1533"&gt;http://www.sys-con.com/java/article.cfm?id=1533&lt;/a&gt;&lt;br&gt; The smallest &amp;quot;Hello World&amp;quot; (Page last updated July 2002, Added 2002-07-24, Author Norman Richards, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l333 level1 lfo46'&gt;[Brilliantly amusing search to make the      smallest &amp;quot;Hello World&amp;quot; program.] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l333 level1 lfo46'&gt;Use the -g:none option to strip debugging      bytes from classfiles. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l333 level1 lfo46'&gt;Most bytes in Java class files are from the      constant pool, then the method declarations. The constant pool includes      class and method names as well as strings. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l333 level1 lfo46'&gt;The Java compiler will insert a default      constructor if you don't specify one, but the constructor is only needed      if you will create instances. You can remove the constructor if you will      not be creating instances. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l333 level1 lfo46'&gt;Most variables and class references used by      the code generate entries in the constant pool. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l333 level1 lfo46'&gt;Reusing already existing constant pool entries      for class/method/variable names reduces the class file size. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-11-2000/jw-1110-smartproxy.html"&gt;http://www.javaworld.com/javaworld/jw-11-2000/jw-1110-smartproxy.html&lt;/a&gt;&lt;br&gt; Article on using smart proxies. (Page last updated November 2000, Added 2001-01-19, Author M. Jeff Wilson, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l65 level1 lfo47'&gt;Use smart proxies to transparently cache data      in the client, thus reducing the number of remote calls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l65 level1 lfo47'&gt;Use smart proxies for caching frequently read,      seldom-updated data of remote objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l65 level1 lfo47'&gt;Use smart proxies to monitor the performance of      RMI calls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l65 level1 lfo47'&gt;Use smart proxies to prevent returning multiple      copies of the same remote object to client code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www-4.ibm.com/software/webservers/appserv/ws_bestpractices.pdf"&gt;http://www-4.ibm.com/software/webservers/appserv/ws_bestpractices.pdf&lt;/a&gt;&lt;br&gt; Paper detailing the &amp;quot;Best Practices for Developing High Performance Web and Enterprise Applications&amp;quot; using IBM's WebSphere. All the tips are generally applicable to servlet/EJB development, as well as other types of server development. (Page last updated September 2000, Added 2001-01-19, Author Harvey W. Gunther, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Do not store large object graphs in      javax.servlet.http.HttpSession. Servlets may need to serialize and deserialize      HttpSession objects for persistent sessions, and making them large      produces a large serialization overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Use the tag &amp;quot;&amp;lt;%@ page      session=&amp;quot;false&amp;quot;%&amp;gt;&amp;quot; to avoid creating HttpSessions in      JSPs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Minimize synchronization in Servlets to avoid      multiple execution threads becoming effectively single-threaded. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Do not use javax.servlet.SingleThreadModel. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Use JDBC connection pooling, release JDBC      resources when done, and reuse datasources for JDBC connections. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Use the HttpServlet Init method to perform expensive      operations that need only be done once. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Minimize use of System.out.println. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Avoid String concatenation &amp;quot;+=&amp;quot;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Access entity beans from session beans, not      from client or servlet code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Reuse EJB homes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Use Read-Only methods where appropriate in entity-beans      to avoid unnecessary invocations to store. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Use the lowest impact transaction level      possible for each transaction. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;The EJB &amp;quot;remote programming&amp;quot; model      always assumes EJB calls are remote, even where this is not so. Where      calls are actually local to the same JVM, try to use calling mechanisms      that avoid the remote call. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Remove stateful session beans (and any other      unneeded objects) when finished with, to avoid extra overheads in case the      container needs to be passivated. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l113 level1 lfo48'&gt;Beans.instantiate() incurs a filesystem check      to create new bean instances. Use &amp;quot;new&amp;quot; to avoid this overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www-4.ibm.com/software/webservers/appserv/3steps_perf_tuning.pdf"&gt;http://www-4.ibm.com/software/webservers/appserv/3steps_perf_tuning.pdf&lt;/a&gt;&lt;br&gt; Tuning IBM's WebSphere product. White paper: &amp;quot;Methodology for Production Performance Tuning&amp;quot;. Only non-product specific Java tips have been extracted here. (Page last updated September 2000, Added 2001-01-19, Author Gennaro (Jerry) Cuomo, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;A size restricted queue (closed queue) allows      system resources to be more tightly managed than an open queue. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;The network provides a front-end queue. A      server should be configured to use the network queue as its bottleneck,      i.e. only accept a request from the network when there are sufficient      resources to process the request. This reduces the load on an app server.      However, sufficient requests should be accepted to ensure that the app      server is working at maximum capacity, i.e. try not to let a component sit      idle while there are still requests that can be accepted even if other      components are fully worked. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;Try to balance the workload of the various      components. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;[Paper shows a nice throughput curve giving      recommended scaling behavior for an server] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;The desirable target bottleneck is the CPU,      i.e. a server should be tuned until the CPU is the remaining bottleneck.      Adding CPUs is a simple remedy to this. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;Use connection pools and cached prepared      statements for database access. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;Object memory management is particularly      important for server applications. Typically garbage collection could take      between 5% and 20% of the server execution time. Garbage collection      statistics provide a useful monitor to determine the server's      &amp;quot;health&amp;quot;. Use the verbosegc flag to collect basic GC statistics.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;GC statistcs to monitor are: total time spent      in GC (target less than 15% of execution time); average time per GC;      average memory collected per GC; average objects collected per GC. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;For long lived server processes it is particularly      important to eliminate memory leaks (references retained to objects and      never released). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;Use -ms and -mx to tune the JVM heap. Bigger      means more space but GC takes longer. Use the GC statistics to determine      the optimal setting, i.e the setting which provides the minimum average      overhead from GC. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l291 level1 lfo49'&gt;The ability to reload classes is typically      achieved by testing a filesystem timestamp. This check should be done at      set intermediate periods, and not on every request as the filesystem check      is an expensive operation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.redbooks.ibm.com/abstracts/sg245657.html"&gt;http://www.redbooks.ibm.com/abstracts/sg245657.html&lt;/a&gt;&lt;br&gt; WebSphere V3 Performance Tuning Guide (Page last updated March 2000, Added 2001-01-19, Authors Ken Ueno, Tom Alcott, Jeff Carlson, Andrew Dunshea, Hajo Kitzhöfer, Yuko Hayakawa, Frank Mogus, Colin D. Wordsworth, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l101 level1 lfo50'&gt;[The Red book lists and discusses tuning      parameters available to Websphere] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l101 level1 lfo50'&gt;Run an application server and any database      servers on separate server machines. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l101 level1 lfo50'&gt;JVM heap size: -mx, -ms [-Xmx, -Xms]. As a      starting point for a server based on a single JVM, consider setting the      maximum heap size to 1/4 the total physical memory on the server and      setting the minimum to 1/2 of the maximum heap. Sun recommends that ms be      set to somewhere between 1/10 and 1/4 of the mx setting. They do not      recommend setting ms and mx to be the same. Bigger is not always better      for heap size. In general increasing the size of the Java heap improves      throughput to the point where the heap no longer resides in physical      memory. Once the heap begins swapping to disk, Java performance      drastically suffers. Therefore, the mx heap setting should be set small      enough to contain the heap within physical memory. Also, large heaps can      take several seconds to fill up, so garbage collection occurs less      frequently which means that pause times due to GC will increase. Use      verbosegc to help determine the optimum size that minimizes overall GC. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l101 level1 lfo50'&gt;In some cases turning off asynchronous garbage      collection (&amp;quot;-noasyncgc&amp;quot;, not always available to all JVMs) can      improve performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l101 level1 lfo50'&gt;Setting the JVM stack and native thread stack      size (-oss and -ss) too large (e.g. greater than 2MB) can significantly      degrade performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l101 level1 lfo50'&gt;When security is enabled (e.g. SSL, password      authentication, security contexts and access lists, encryption, etc)      performance is degraded by significant amounts. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l101 level1 lfo50'&gt;One of the most time-consuming procedures of a      database application is establishing a connection to the database. Use      connection pooling to minimize this overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-02-2001/jw-0216-ternary.html"&gt;http://www.javaworld.com/javaworld/jw-02-2001/jw-0216-ternary.html&lt;/a&gt;&lt;br&gt; Using a ternary search tree for fast searches of partial text matches (Page last updated February 2001, Added 2001-03-21, Author Wally Flint, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l336 level1 lfo51'&gt;[Article discusses several efficient algorthms      for searching through ternary search trees which provide fast partial      match searches of character array keys]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www-106.ibm.com/developerworks/java/library/j-threads1.html"&gt;http://www-106.ibm.com/developerworks/java/library/j-threads1.html&lt;/a&gt;&lt;br&gt; When synchronization is required (Page last updated July 2001, Added 2001-07-20, Author Brian Goetz, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo52'&gt;synchronization means mutual exclusion (if the      same monitor is used), atomicity of the synchronized block (again with      respect to other threads using the same monitor) and synchronization of      thread memory to main memory. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo52'&gt;Because synchronization synchronizes thread      memory with main memory, there is a cost to synchronization beyond simply      acquiring a lock. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo52'&gt;Too little synchronization can lead to corrupt      data; too much can lead to reduced performance and deadlock. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo52'&gt;The costs of synchronization vary with JVMs,      with more recent JVMs being more efficient. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo52'&gt;The costs of synchronization differs depending      on whether or not threads are actually contending for locks (more      expensive, slower), or for uncontended synchronization where the thread is      basically acting in single-threaded mode (cheaper, faster). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo52'&gt;You need to synchronize or make &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;volatile&lt;/span&gt;&lt;/code&gt; variables holding data      that will be shared between threads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l4 level1 lfo52'&gt;Composite operations may need synchronizing to      make them atomic even if each individual operation is already      synchronized. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www-106.ibm.com/developerworks/java/library/j-threads2.html"&gt;http://www-106.ibm.com/developerworks/java/library/j-threads2.html&lt;/a&gt;&lt;br&gt; Reducing thread contention (Page last updated September 2001, Added 2001-10-22, Author Brian Goetz, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l98 level1 lfo53'&gt;Thread contention impairs scalability because      it forces the scheduler to serialize operations, even if a free processor      is available. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l98 level1 lfo53'&gt;Analyze your program to determine where contention      is likely to occur. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l98 level1 lfo53'&gt;Make synchronized blocks as short as possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l98 level1 lfo53'&gt;Spread synchronizations over more than one      lock. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l98 level1 lfo53'&gt;[Article provides a thread-safe hashed Map      implementation with lower global contention than Hashtable.] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l98 level1 lfo53'&gt;If you will be acquiring and releasing the same      lock many times (such as in a loop), acquire the lock before the loop: it      is faster to acquire a lock that you already hold than one that nobody      holds. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2002/04/03/javaenterprise_tips.html"&gt;http://www.onjava.com/pub/a/onjava/2002/04/03/javaenterprise_tips.html&lt;/a&gt;&lt;br&gt; J2EE worst practices (Page last updated April 2002, Added 2002-04-26, Author Brett McLaughlin, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l270 level1 lfo54'&gt;The choice of data store type (RDB, ODB,      XML-DB, directory-server, etc) affects performance, and should not be made      without performance considerations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l270 level1 lfo54'&gt;Directory servers are optimized for frequent      reads, with few writes. If you frequently add data to a directory server,      performance degrades. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l270 level1 lfo54'&gt;Stateless session beans are soooo much faster.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-12-2001/jw-1207-hprof.html"&gt;http://www.javaworld.com/javaworld/jw-12-2001/jw-1207-hprof.html&lt;/a&gt;&lt;br&gt; The hprof profiler (Page last updated December 2001, Added 2001-12-26, Author Bill Pierce, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l87 level1 lfo55'&gt;Use the hprof profiler with the startup command      &amp;quot;java -Xrunhprof[:help][:&amp;lt;suboption&amp;gt;=&amp;lt;value&amp;gt;,...]      MyMainClass&amp;quot;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l87 level1 lfo55'&gt;[Article describes using hprof and reading the      resultant profile files to profile an application for memory leaks,      cpu-bottlenecks and thread contention]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l87 level1 lfo55'&gt;hprof can be used to profile object allocation      (heap option), method bottlnecks (cpu option) and thread contention      (monitor option). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.weblogic.com/docs51/admindocs/tuning.html"&gt;http://www.weblogic.com/docs51/admindocs/tuning.html&lt;/a&gt;&lt;br&gt; Weblogic tuning (generally applicable Java tips extracted) (Page last updated June 2000, Added 2001-03-21, Author BEA Systems, Publisher BEA). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Response time is affected by: contention and      wait times, particularly for shared resources; and software and hardware      component performance, i.e. the amount of time that resources are needed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;A well-designed application can increase      performance by simply adding more resources (for instance, an extra server).      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Use clustered or multi-processing machines; use      a JIT-enabled JVM; use Java 2 rather than JDK 1.1; &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Use -noclassgc. Use the maximum possible heap      size that also is small enough to avoid the JVM from swapping (e.g. 80% of      RAM left over after other required processes). Consider starting with      minimum initial heap size so that the garbage collector doesn't suddenly      encounter a full heap with lots of garbage. Benchmarkers sometimes like to      set the heap as high as possible to completely avoid GC for the duration      of the benchmark. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Distributing the application over several      server JVMs means that GC impact will be spread in time, i.e. the various      JVMs will most likely GC at different times from each. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;On Java 1.1 the most effective heap size is      that which limits the longest GC incurred pause to the longest acceptable      pause in processing time. This will typically require a &lt;em&gt;&lt;span      style='font-family:"Calibri","sans-serif"'&gt;reduction&lt;/span&gt;&lt;/em&gt; in the      maximum heap size. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Too many threads causes too much context      switching. Too few threads may underutilize the system. If n=number of      threads, k=number of CPUs, then: (n &amp;lt; k) results in an under utilized      CPU; (n == k) is theoretically ideal, but each CPU will probably be under      utilized; (n &amp;gt; k) by a &amp;quot;moderate amount of threads&amp;quot; is      practically ideal; (n &amp;gt; k) by &amp;quot;many threads&amp;quot; can lead to      significant performance degradation from context switching. Blocked      threads count for less in the previous formulae. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Symptoms of too few threads: CPU is waiting to      do work, but there is work that could be done; Can not get 100% CPU; All      threads are blocked [on i/o] and runnable when you do an execution      snapshot. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Symptoms of too many threads: An execution      snapshot shows that there is a lot of context switching going on in your      JVM; Your performance increases as you decrease the number of threads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;If many client connections are dropped or      refused, the TCP listen queue may be too short. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l44 level1 lfo56'&gt;Try to avoid excessive cycling      (creation/deletion or activation/passivation) of beans. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.weblogic.com/docs51/techdeploy/jdbcperf.html"&gt;http://www.weblogic.com/docs51/techdeploy/jdbcperf.html&lt;/a&gt;&lt;br&gt; Weblogic JDBC tuning (Page last updated April 1999, Added 2001-03-21, Author BEA Systems, Publisher BEA). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Use connection pools to the database and reuse      connections rather than repeatedly opening and closing connections.      Optimal pool size is when the connection pool is just large enough to      service requests without waits. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Cache frequently requested data in the JVM and      avoid the unnecessary database requests. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Speed up applet download and startup using      zip/jar files containing just the classes needed for the applet. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Avoid accessing the database wherever      possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Fetch rows in batches rather than one at a      time, using the batch as a read-ahead mechanism (i.e. pre-fetch rows in      batches). Tune the batch size and the number of rows pre-fetched. Avoid      pre-fetching BLOBs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Avoid moving data unless absolutely necessary.      Process the data and produce results as close to its source as possible.      Use stored procedures. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Streamline data before the result crosses the      network. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Use stored procedures to avoid extra network      transfers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Use built-in DBMS set-based processing to      operate on multiple rows/tables in one request. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Avoid row at a time processing, process      multiple rows together wherever possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Counting entries in a table (e.g. using &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;SELECT count(*) from myTable, yourTable where ...      &lt;/span&gt;&lt;/code&gt;) is resource intensive. Try first selecting into temporary      tables, returning only the count, and then sending a refined second query      to return only a subset of the rows in the temporary table. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Proper use of SQL can reduce resource      requirements. Use queries which return the minimum of data needed: avoid &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;SELECT *&lt;/span&gt;&lt;/code&gt; queries. A complex query      that returns a small subset of data is more efficient than a simple query      that returns more data than is needed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Make your queries as smart as possible, i.e.      as precise as possible to minimize the data transferred to just that      subset that is required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Try to batch updates: collect statements      together and execute them together in one transaction. Use conditional      logic and temporary variables if necessary to achieve statement batching. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Never let a DBMS transaction span user input. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Consider using optimistic locking. Optimistic      locking employs timestamps to verify that data has not been changed by      another user, otherwise the transaction fails. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Use in-place updates, i.e. change data in      rows/tables that already exist rather than adding or deleting rows/tables.      Try to avoid moving rows or changing their sizes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Store operational data and historic data      separately (or more generally store frequently used data separately from      infrequently used data). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Keep your operational data set as small as      possible, to avoid having to read through data that is irrelevant. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;DBMSs work well with parallelism. Try to design      the application to do other things while interacting with the DBMS. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Use pipelining and parallelism. Designing      applications to support lots of parallel processes working on easily      distinguished subsets of the work makes the application faster. If there      are multiple steps to processing, try to design your application so that      subsequent steps can start working on the portion of data that any prior      process has finished, instead of having to wait until the prior process is      complete. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l258 level1 lfo57'&gt;Choose the right driver for your application,      i.e. the fastest JDBC driver. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/websphere/article.cfm?id=40"&gt;http://www.sys-con.com/websphere/article.cfm?id=40&lt;/a&gt;&lt;br&gt; JDBC optimizing for DB2 (Page last updated April 2002, Added 2002-04-26, Author John Goodson, Publisher WebSphere Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Use the same connection to execute multiple      statements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Keep connection objects open, and reuse them,      rather than repeatedly connecting and disconnecting. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Turn off autocommit, but don't leave transactions      open for too long. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Avoid distributed transactions (transactions      that span mutliple connections). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Minimize the data retrieved from the database,      both columns and rows. Use setMaxRows, setMaxFieldSize, and SetFetchSize. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Use the most efficiently handled data type:      character strings are faster than integers, which are in turn more      efficient than floating-point and timestamps. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Use programmatic updates: updateXXX() calls on      updatable resultsets. The resultset is already postioned at a row, so eliminating      the usual overhead of finding the row to be updated when using an UPDATE      statement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Cache any required metadata and use metadata      methods as rarely as possible as they are quite slow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Avoid using null parameters in metadata      queries. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Use a dummy query to get the metadata for a      column, rather than use the getcolumns() &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Use parameter markers with stored procedures,      rather than embedding data literally in the statement, to minimize parsing      overheads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Use prepared statements for repeatedly      executing SQL statements &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l183 level1 lfo58'&gt;Choose the optimal cursor: forward-only for      sequential reads; insensitive for two-way scrolling. Avoid insenstive      cursors for queries that only return one row. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1171"&gt;http://www.sys-con.com/java/article.cfm?id=1171&lt;/a&gt;&lt;br&gt; J2EE Performance tuning (Page last updated October 2001, Added 2001-10-22, Author James McGovern, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Call HttpSession.invalidate() to clean up a      session when you no longer need to use it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;For Web pages that don't require session      tracking, save resources by turning off automatic session creation using:      &amp;lt;%@ page session=&amp;quot;false&amp;quot;%&amp;gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Implement the HttpSessionBindingListener for      all beans that are scoped as session interface and explicitly release      resources implementing the method valueUnbound(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Timeout sessions more quickly by setting the      timeout or using session.setMaxInactiveInterval(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Keep-Alive may be extra overhead for dynamic      sites. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Use the include directive &amp;lt;%@ include      file=&amp;quot;copyleft.html&amp;quot; %&amp;gt; where possible, as this is a      compile-time directive (include action &amp;lt;jsp:include      page=&amp;quot;copyleft.jsp&amp;quot; /&amp;gt; is a runtime directive). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Use cache tagging where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Always access entity beans from session beans.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;If only using an entity bean for data access,      use JDBC directly instead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Use read-only in the deployment descriptor. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Cache access to EJB homes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Use local entity beans when beans are      co-located in the same JVM. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Proprietary stubs can be used for caching and      batching data. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Use a dedicated remote object to generate      unique primary keys. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Follow standard JDBC optimizations: use      connection pools; prefer stored procedures or direct SQL; use type 4      drivers; remove extra columns from the result set; use prepared statements      when practical; have your DBA tune the query; choose the appropriate      transaction levels. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Consider storing all database character data      in Unicode to eliminate conversion overheads. But beware: this step will      cause your database size to grow, as Unicode requires 2 bytes per      character. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Use block fetches when the query will give a      large ResultSet and all rows are needed. Use the Page-by-Page Iterator      pattern when only some of the rows may be needed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Consider using an in-memory database (product)      for data that doesn't need to be persisted. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Use an algorithm to prune caches to stop them      growing too large. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Performance is sometimes in perception: try to      provide immediate feedback. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l267 level1 lfo59'&gt;Optimizing code is one of the last things      developers should consider [after optimizing configurations, hardware,      etc]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-09-2001/jw-0907-merlin.html"&gt;http://www.javaworld.com/javaworld/jw-09-2001/jw-0907-merlin.html&lt;/a&gt;&lt;br&gt; Using nonblocking I/O and memory-mapped buffers in SDK 1.4. (Page last updated September 2001, Added 2001-10-22, Author Michael T. Nygard, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Before SDK 1.4, servers had a number of      performance problems: i/o could easily be blocked; garbage was easily      generated when reading i/o; many threads are needed to scale the server. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Many threads each blocked on i/o is an      inefficient architecture in comparison to one thread blocked on many i/o      calls (multiplexed i/o). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Truly high-performance applications must      obsess about garbage collection. The more garbage generated, the lower the      application throughput. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;A Buffer (java.nio.*Buffer) is a reusable      portion of memory. A MappedByteBuffer can map a portion of a file directly      into memory. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Direct Buffer objects can be read/written      directly from Channels, but nondirect Buffer objects have a data copy      performed for read/writes to i/o (and so are slower and may generate      garbage). Convert nondirect Buffers to direct Buffers if they will be used      more than once. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Scatter/gather operations allow i/o to operate      to and from several Buffers in one operation, for increased efficiency.      Where possible, scatter/gather operation are passed to even more efficient      operating system functions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Channels can be configured to operate blocking      or non-blocking i/o. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Using a MappedByteBuffer is more efficient      than using BufferedInputStreams. The operating system can page into memory      more efficiently than BufferedInputStream can do a block read. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l133 level1 lfo60'&gt;Use Selectors to multiplex i/o and avoid      having to block multiple threads waiting on i/o. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1408"&gt;http://www.sys-con.com/java/article.cfm?id=1408&lt;/a&gt;&lt;br&gt; Combining apps in one JVM (Page last updated April 2002, Added 2002-04-26, Author Kirk Pepperdine, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l105 level1 lfo61'&gt;Loading multiple applications in the same JVM      allows resource sharing and reduce system memory requirements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l105 level1 lfo61'&gt;Classloaders allow multiple applications to      run in the same JVM without interfering with each other. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l105 level1 lfo61'&gt;[Article discusses the resource sharing      problems of running multiple applications in the same JVM]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://portals.devx.com/datadirect/Article/6338"&gt;http://portals.devx.com/datadirect/Article/6338&lt;/a&gt;&lt;br&gt; JDBC Drivers (Page last updated March 2002, Added 2002-04-26, Author Barrie Sosinsky, Publisher DevX). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Type 1 drivers are JDBC-ODBC bridges, plus an      ODBC driver. Recommended only for prototyping, not for production. Not      suitable for high-transaction environments. Not well supported, and      limited in functionality. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Type 2 drivers use a native API, and are      part-Java drivers. Have a binary-code client loading overhead, and may not      be fully-featured. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Type 3 drivers are a pure Java driver which      connects to database middleware. Can be server-based which is frequently      faster than types 1 and 2. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Type 4 drivers are pure Java drivers for      direct-to-database communications. This can minimize overheads, and      generally provides the fastest driver. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;JDBC 3.0 has additional features to improve      performance such as advancements in connection pooling, statement pooling,      RowSet objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Opening a connection is the most      resource-expensive step in database transactions. Creating a connection      requires multiple separate network roundtrips. However, once the      connection object has been created, there is little penalty in leaving the      connection object in place and reusing it for future connections. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Connection pooling, keeps open a cache of      database connection objects, making them available for immediate use.      Instead of performing expensive network roundtrips to the database server      to open a connection, a connection attempt results in the re-assignment of      a connection from the local cache. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;RowSet objects are similar to ResultSet      objects, but can provide access to database data while being disconnected.      This allows data to be efficiently cached in its simplest form. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Prepared statement pooling (available from JDBC      3.0) caches SQL queries that have been previously optimized and run so      that, should they be needed again, they do not have to go through      optimization pre-processing again (avoiding optimization steps, such as      checking syntax, validating addresses, and optimizing access paths and      execution plans). Statement pooling can be a significant performance      booster. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Statement pooling and connection pooling in      JDBC 3.0 can cooperate to share statement pools, so that connections that      can use a cached statement from another connection, thus incurring      statement preparation overheads only once on the first execution of some      SQL by any connection. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Database drivers developed by vendors other      than the the database vendor can be better performing and more feature      full. (Driver vendors concentrate on the driver, database vendors have      many other things to consider). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Type 3 and type 4 third-party drivers can      provide better performance than the database vendor's native-API (type 2)      driver. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Try to use a driver that supports JDBC 3.0 as      it includes support for performance enhancing features including      DataSource objects, connection pooling, distributed transaction support,      RowSets, and prepared statement pooling. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l92 level1 lfo62'&gt;Type 3 and Type 4 drivers are the drivers to      use when performance is important. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/Books/EarlyJ2SE/IO.pdf"&gt;http://developer.java.sun.com/developer/Books/EarlyJ2SE/IO.pdf&lt;/a&gt;&lt;br&gt; Shortened version of chapter 2, &amp;quot;I/O&amp;quot;, from &amp;quot;Early Adopter J2SE 1.4&amp;quot; (Page last updated October 2001, Added 2001-10-22, Author James Hart, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l255 level1 lfo63'&gt;Non-blocking I/O can improve performance by      minimizing the amount of time spent in I/O calls, though they may add      complexity to the application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l255 level1 lfo63'&gt;The old I/O classes can now be interrupted      more reliably from 1.4. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l255 level1 lfo63'&gt;FileChannel.transferFrom() is an efficient way      to copy data between files. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/Books/EarlyJ2SE/Using.pdf"&gt;http://developer.java.sun.com/developer/Books/EarlyJ2SE/Using.pdf&lt;/a&gt;&lt;br&gt; Shortened version of chapter 5, &amp;quot;Utilities: The Logging Architecture&amp;quot;, from &amp;quot;Early Adopter J2SE 1.4&amp;quot; (Page last updated October 2001, Added 2001-10-22, Author James Hart, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l70 level1 lfo64'&gt;Logging can take place asynchronously: a call      to log can return before the log has been formatted and written. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l70 level1 lfo64'&gt;The logging framework provides methods (in      Logger) for recording method activity, but this may have a large overhead      to use. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.AmbySoft.com/javaCodingStandards.pdf"&gt;http://www.AmbySoft.com/javaCodingStandards.pdf&lt;/a&gt;&lt;br&gt; Coding standards with a small but interesting section (section 7.3) on optimizations (Page last updated January 2000, Added 2001-04-20, Author Scott Ambler, Publisher AmbySoft). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;Optimizing code is one of the last things that      programmers should be thinking about, not one of the first. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;Don't optimize code that already runs fast      enough. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;Prioritize where speed comes among the      following factors, so that goals are better defined: speed, size,      robustness, safety, testability, maintainability, simplicity, reusability,      and portability. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;The most important factors in looking for code      to optimize are fixed overhead and performance on large inputs: fixed      overhead dominates speed for small inputs and the algorithm dominates for      large inputs (a program that works well for both small and large inputs      will likely work well for medium-sized inputs). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;Operations that take a particular amount of      time, such as the way that memory and buffers are handled, often show      substantial time variations between platforms. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;Users are sensitive to particular delays: users      will likely be happier with a screen that draws itself immediately and      then takes eight seconds to load data than with a screen that draws itself      after taking five seconds to load data. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;Give users immediate feedback: you do not      always need to make your code run faster to optimize it in the eyes of      your users. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l25 level1 lfo65'&gt;Slow software that works is almost always      preferable to fast software that does not. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://win-www.uia.ac.be/%7Es985218/professional/thesis/archief/documenten/Marktoverzicht.doc"&gt;http://win-www.uia.ac.be/~s985218/professional/thesis/archief/documenten/Marktoverzicht.doc&lt;/a&gt;&lt;br&gt; Overview of common application servers. (Announced at &lt;a href="http://www.theserverside.com/home/thread.jsp?thread_id=9581"&gt;http://www.theserverside.com/home/thread.jsp?thread_id=9581&lt;/a&gt;). I've extracted the performance related features (Page last updated October 2001, Added 2001-10-22, Author Pieter Van Gorp, Publisher Van Gorp). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Load balancing: random; minimum load;      round-robin; weighted round-robin; performance-based; load-based; dynamic      algorithm based; dynamic registration. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Clustering. Additionally: distributed      transaction management; in-memory replication of session state      information; no single point of failure. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Connection pooling. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Caching. JNDI caching. Distributed caching      with synchronization. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Thread pooling. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Configurable user Quality of Service. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Analysis tools. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Low system/memory requirements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Optimized subsystems (RMI, JMS, JDBC drivers,      JSP tags &amp;amp; cacheable page fragments). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l317 level1 lfo66'&gt;Optimistic transaction support. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/11/07/atomic.html"&gt;http://www.onjava.com/pub/a/onjava/2001/11/07/atomic.html&lt;/a&gt;&lt;br&gt; Atomic File Transactions. (Page last updated November 2001, Added 2001-11-27, Author Jonathan Amsterdam, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l179 level1 lfo67'&gt;If you don't require powerful search      capabilities, using flat files may be faster than dealing with a database.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l179 level1 lfo67'&gt;Basic file operations (deletion, creation,      renaming) are atomic. Other operations and combinations of operations are      not atomic. Atomicity can be built but comes at a performance cost. You      will have to determine whether the increase in robustness is worth the      slowdown in your application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l179 level1 lfo67'&gt;Do the I/O in a background thread to mitigate      the performance impact of adding atomicity to file transactions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l179 level1 lfo67'&gt;[Article discusses how to use a free package      which provides atomicity for file transactions, and how the atomicity is      provided]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2002/02/06/atomic.html"&gt;http://www.onjava.com/pub/a/onjava/2002/02/06/atomic.html&lt;/a&gt;&lt;br&gt; Atomic File Transactions, Part 2 (Page last updated February 2002, Added 2002-02-22, Author Jonathan Amsterdam, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l243 level1 lfo68'&gt;[Article continues implementation of a      framework for atomic file transactions]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l243 level1 lfo68'&gt;If a transaction creates a file and then performs      several other actions on it, there is no need to undo the actions -- it is      enough to delete the file. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l243 level1 lfo68'&gt;If a backup copy of a file is made, then it is      unnecessary to roll back all subsequent actions on the file: recovery can      simply restore the backup. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://wireless.java.sun.com/midp/ttips/memory/"&gt;http://wireless.java.sun.com/midp/ttips/memory/&lt;/a&gt;&lt;br&gt; MIDP memory tuning (Page last updated June 2002, Added 2002-07-24, Author Jonathan Knudsen, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l295 level1 lfo69'&gt;Use an obfuscator to minimize the size of      classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l295 level1 lfo69'&gt;Minimize resource sizes by using as few images      as possible, and using fewer colors in the images you do use. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l295 level1 lfo69'&gt;Use as few objects as possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l295 level1 lfo69'&gt;Dereference objects (set them to null) when      they're no longer useful so they will be garbage-collected. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l295 level1 lfo69'&gt;Catch OutOfMemoryErrors on all allocations, or      at least the large ones. Don't let an OutOfMemoryError take your      application by surprise. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l295 level1 lfo69'&gt;MIDlets use three types of memory: program      memory, heap, and persistent storage. Each of these may be scarce and they      should all be treated with respect. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.sun.com/blueprints/patterns/j2ee_patterns/catalog.html"&gt;http://java.sun.com/blueprints/patterns/j2ee_patterns/catalog.html&lt;/a&gt;&lt;br&gt; Design patterns catalog (Page last updated 2001, Added 2002-01-25, Author ?, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l324 level1 lfo70'&gt;[Page lists some patterns with summaries and      links to detailed info. Patterns are: Data Access Object; Fast-Lane      Reader; Front Controller; Page-by-Page Iterator; Session Facade; Value      Object]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l324 level1 lfo70'&gt;Use the Data Access Object pattern to decouple      business logic from data access logic, allowing for optimizations to be      made in how data is managed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l324 level1 lfo70'&gt;Use the Fast-Lane Reader pattern to accelerate      read-only data access by not using enterprise beans. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l324 level1 lfo70'&gt;Use the Front Controller pattern to centralize      incoming client requests, allowing optimizations to be made in aggregating      the resulting view. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l324 level1 lfo70'&gt;Use the Page-by-Page Iterator pattern to      efficiently access a large, remote list by retrieving its elements one      sublist of value objects at a time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l324 level1 lfo70'&gt;Use the Session Facade pattern to provide a      unified, workflow-oriented interface to a set of enterprise beans, thus      minimizing client calls to server EJBs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l324 level1 lfo70'&gt;Use the Value Object pattern to efficiently      transfer remote, fine-grained data by sending a coarse-grained view of the      data. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1268"&gt;http://www.sys-con.com/java/article.cfm?id=1268&lt;/a&gt;&lt;br&gt; EJB design (Page last updated January 2002, Added 2002-01-25, Author Boris Lublinsky, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;Some application server implementations (e.g.,      WebSphere) automatically convert remote communications to local      communications to make them faster. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;Low granularity (i.e. fine-grained) methods in      an EJB typically leads to poor performance of the overall system. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;Local interfaces in EJB 2.0 is one attempt to      improve overall performance: local interfaces provide for beans in the      same container to interact locally without involving RMI. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;The most effective way to improve the overall      performance of EJB-based applications is to minimize the amount of method      invocations, making the communications overhead negligible compared with      the execution time. This can be achieved by implementing coarse-grained      methods. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;Entity beans should not be simply mapped to      database tables. Treating entity beans as such fine-grained objects which      are effectively wrappers on table rows leads to increased network      communications and heavier database communications than if entity beans      are treated as coarse-grained components. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;For optimal performance, entity beans should      be designed to: have large granularity, which usually means they should      contain multiple Java classes and support multiple database tables; be associated      with a certain amount of persistent data, typically multiple database      tables, one of which should define the primary key for the whole bean;      support meaningful business methods and encapsulate business rules to      access the data. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;Don't use client transactions in the EJB      environment since long-running transactions that can cause database      lockup. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l301 level1 lfo71'&gt;Entity beans are transactional resources due      to their stateful nature, but application server vendors often rely on the      underlying database to lock and resolve access appropriately. Although      this approach greatly improves performance, it provides the potential for      database lockup. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/technicalArticles/J2EE/despat/"&gt;http://developer.java.sun.com/developer/technicalArticles/J2EE/despat/&lt;/a&gt;&lt;br&gt; Design Patterns (Page last updated January 2002, Added 2002-01-25, Author Vijay Ramachandran, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l249 level1 lfo72'&gt;[Article discusses several design patterns:      Model-View-Controller, Front Controller, Session Facade, Data Access      Object]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l249 level1 lfo72'&gt;Use the Front Controller pattern to channel      all client requests through a single decision point, which allows the      application to be balanced at runtime. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l249 level1 lfo72'&gt;Use a Session Facade to provide a simple      interface to a complex subsystem of enterprise beans, and to reduce      network communication requirements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l249 level1 lfo72'&gt;Use Data Access Objects to decouple the      business logic from the data access logic, allowing data access      optimizations to be decoupled from other types of optimizations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2002/01/16/patterns.html"&gt;http://www.onjava.com/pub/a/onjava/2002/01/16/patterns.html&lt;/a&gt;&lt;br&gt; J2EE Design Patterns for the presentation tier (Page last updated January 2002, Added 2002-01-25, Author Sue Spielman, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l27 level1 lfo73'&gt;[Article discusses several design patterns:      Intercepting Filter, Front Controller, View Helper, Composite View,      Service To Worker, Dispatch View. Performance is not explicitly covered,      but at least a couple are relevant to getting good performance]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.devx.com/upload/free/Features/Javapro/2002/02feb02/kr0202/kr0202-1.asp"&gt;http://www.devx.com/upload/free/Features/Javapro/2002/02feb02/kr0202/kr0202-1.asp&lt;/a&gt;&lt;br&gt; Thread programming (Page last updated January 2002, Added 2002-01-25, Author Karthik Rangaraju, Publisher DevX). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l262 level1 lfo74'&gt;Use Djikstra semaphores (synchronized      acquire()/release()) to control access to a finite pool of resources. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l262 level1 lfo74'&gt;Conditional events provide a more      sophisticated version of the wait()/notify() mechanism which avoids some      potential problems of that mechanism. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l262 level1 lfo74'&gt;Blocking queues provides a mechanism for      reliably distributing requests to multiple server threads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l262 level1 lfo74'&gt;A dispatcher-worker model consists of a      dispatcher which hands requests of to multiple worker threads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l262 level1 lfo74'&gt;A pipeline model consists of a dispatcher      which iteratively hands a particular request to one worker thread after      another, with each worker thread completing part of the overall request. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://portals.devx.com/Intel/Article/6441"&gt;http://portals.devx.com/Intel/Article/6441&lt;/a&gt;&lt;br&gt; Some (Intel chip) optimization myths debunked. (Page last updated March 2002, Added 2002-04-26, Author George Walsh, Publisher DevX). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l69 level1 lfo75'&gt;If optimization and performance tools are used      throughout development rather than tacked on at the end as a final      &amp;quot;optimization phase,&amp;quot; time to market and costs can actually be      decreased by speeding up the process of locating problems and bottlenecks      in code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l69 level1 lfo75'&gt;Not taking advantage of new optimized      interfaces will ultimately put you at a competitive disadvantage. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1280"&gt;http://www.sys-con.com/java/article.cfm?id=1280&lt;/a&gt;&lt;br&gt; Benchmarking (Page last updated January 2002, Added 2002-01-25, Author Glenn Coates &amp;amp; Carl Barratt, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l24 level1 lfo76'&gt;A benchmark should exhaustively exercise the      platform being tested and produce a numerical result corresponding to the      speed of the benchmark. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l24 level1 lfo76'&gt;Benchmarks can be simplistic, made up of simple      routines executed successively. Each routine should run for a reasonable      amount of time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l24 level1 lfo76'&gt;Ensure that performance statistics are not lost      within start-up overheads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l24 level1 lfo76'&gt;Don't rely on standard third-party benchmarks,      as these may not apply to your application characteristics. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l24 level1 lfo76'&gt;Benchmarks could include looking at the speed      of code execution; the response time of the user interface; implementation      of the garbage collector; and memory issues. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l24 level1 lfo76'&gt;In J2ME, software accelerators may improve      speed, but they may also consume excessive power compared to a processor      that executes Java as its native language. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l24 level1 lfo76'&gt;No benchmark can replace the actual user      application. At the earliest possible stage in the design process,      application developers must run their own code on the proposed hardware. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-11-2001/jw-1116-dcl.html"&gt;http://www.javaworld.com/javaworld/jw-11-2001/jw-1116-dcl.html&lt;/a&gt;&lt;br&gt; Double-checked locking revisited. (Page last updated November 2001, Added 2001-11-27, Author Brian Goetz, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l231 level1 lfo77'&gt;Double-checked locking is not guaranteed to      produce consistent results. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l231 level1 lfo77'&gt;Using a ThreadLocal in the double-checked      locking test is guaranteed to produce consistent results, but is slower      than avoiding double-checked locking altogether. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l231 level1 lfo77'&gt;ThreadLocal is faster in each SDK release      through 1.2, 1.3 and 1.4. 1.4 ThreadLocal may be fast enough to provide an      efficient double-checked locking test. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/10/17/rmi.html"&gt;http://www.onjava.com/pub/a/onjava/2001/10/17/rmi.html&lt;/a&gt;&lt;br&gt; Command objects for RMI. (Page last updated October 2001, Added 2001-11-27, Author William Grosso, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l84 level1 lfo78'&gt;Use Command objects to automatically queue or      retry RMI calls. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/10/31/rmi.html"&gt;http://www.onjava.com/pub/a/onjava/2001/10/31/rmi.html&lt;/a&gt;&lt;br&gt; Caching RMI stubs. (Page last updated October 2001, Added 2001-11-27, Author William Grosso, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l164 level1 lfo79'&gt;Remote method calls are much slower than local      calls, at least 1000 times slower. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l164 level1 lfo79'&gt;Reduce the number of remote calls made by an      application to improve performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l164 level1 lfo79'&gt;Cache remote objects locally where possible,      rather than repeatedly fetching them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l164 level1 lfo79'&gt;Use Command objects to transparently add a      remote stub cache to an RMI application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l164 level1 lfo79'&gt;Caching stubs keeps them from being garbage      collected, and may prevent an RMI server from closing. Use a policy to      expire stubs and delete them from the cache. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://intranetjournal.com/articles/200110/gb_10_24_01a.html"&gt;http://intranetjournal.com/articles/200110/gb_10_24_01a.html&lt;/a&gt;&lt;br&gt; Website performance. (Page last updated October 2001, Added 2001-11-27, Author Gordon Benett, Publisher Intranet Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Some e-commerce consultants cite an attention      span on the order of eight seconds as the threshold for abandoning a slow      retail site. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Where broadband connections are the norm,      pages that don't appear instantly stand a good chance of never being seen:      slow pages might as well be no pages. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Systems can only be designed to meet      performance goals if those goals have been identified. Determine what      range of response times will be acceptable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Try to understand the performance impacts of your      design decisions. However the performance of some design choices can be      hard to predict and may remain unclear before testing. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Test the system under conditions that simulate      real patterns of use. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Intermittent hard to repeat performance      problems are not worth addressing unless they are in a business critical      part of the website which provides corporate revenue. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Use a rapid, iterative development process in      combination with frequent performance testing. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l214 level1 lfo80'&gt;Try to plan up-front rather than have to rely      on late-phase tuning. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://java.sun.com/products/java-media/2D/perf_graphics.html"&gt;http://java.sun.com/products/java-media/2D/perf_graphics.html&lt;/a&gt;&lt;br&gt; High performance graphics (Page last updated February 2002, Added 2002-03-25, Author ?, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;The large number extra features and increased      cross-platform compatibility added to the Java Graphics framework in SDK      1.2 made the graphics slower than the 1.1 Graphics. SDK 1.4 targeted these      performance issues head on. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;VolatileImage allows you to create      hardware-accelerated offscreen images, resulting in better performance of      Swing and gaming applications in particular and faster offscreen      rendering. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;When filling a shape with a complex paint,      Java 2D must query the Paint object every time it needs to assign a color      to a pixel whereas a simple color fill only requires iterating through the      pixels and assigning the same color to all of them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;The graphics pipeline (from SDK 1.4) only gets      invalidated when an attribute is changed to a different type of value,      rather than when an attribute is changed to a different value of the same      type. For example rendering one opaque color is the same rendering another      opaque color, so this would not invalidate the pipeline. But changing an      opaque color to a transparent color would invalidate the pipeline. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Smaller font is rendered faster than larger      font. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Hardware-accelerated scaling is currently      (1.4.0 release) disabled on Win32 because of quality problems, but you can      enable it with a runtime flag, -Dsun.java2d.ddscale=true. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;From SDK 1.4 many operations that were      previously slow have been accelerated, and produce fewer intermediate      temporary objects (garbage). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Alpha blending and anti aliasing adversely      affect performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Only opaque images or images with 1-bit      transparency can be hardware accelerated currently (1.4.0). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Use 1-bit transparency to make the background      color of a sprite rectangle transparent so that the character rendered in      the sprite appears to move through the landscape of your game, rather than      within the sprite box. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Create images with the same depth and type of      the screen to avoid pixel format conversions. Use either      Component.createImage() or GraphicsConfiguration.createCompatibleImage(),      or use a BufferedImage created with the ColorModel of the screen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Rectangular fills--including horizontal and      vertical lines--tend to perform better than arbitrary or non-rectangular      shapes whether they are rendered in software or with hardware      acceleration. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;If your application must repeatedly render      non-rectangular shapes, draw the shapes into 1-bit transparency images and      copy the images as needed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;If you experience low frame rates, try      commenting out pieces of your code to find the particular operations that      are causing problems, and replace these problem operations with something      that might perform better. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;Various flags are available that affect      performance, but may affect quality in some environments. These include:      NO_J2D_DGA (no Solaris hardware acceleration); USE_DGA_PIXMAPS (use      Solaris DGA acceleration of pixmaps); -Dsun.java2d.noddraw=true (turn off      DirectDraw); -Dsun.java2d.ddoffscreen=false (disable DirectDraw offscreen      acceleration); -Dsun.java2d.ddscale=true (enable hardware acceleration in      Win32); -Dsun.java2d.pmoffscreen=true/false (store images in pixmaps under      Unix); &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l300 level1 lfo81'&gt;You can trace graphics performance using the      flag &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;-Dsun.java2d.trace=&amp;lt;optionname&amp;gt;,&amp;lt;optionname&amp;gt;,...&lt;/span&gt;&lt;/code&gt;      where the options are &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;log&lt;/span&gt;&lt;/code&gt;      (print primitives on execution); &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;timestamp&lt;/span&gt;&lt;/code&gt;      (timestamp log entries); &lt;code&gt;&lt;span style='font-size:10.0pt'&gt;count&lt;/span&gt;&lt;/code&gt;      (print total calls of each primitive used); &lt;code&gt;&lt;span style='font-size:      10.0pt'&gt;out:&amp;lt;filename&amp;gt;&lt;/span&gt;&lt;/code&gt; (send logs to filename); &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;verbose&lt;/span&gt;&lt;/code&gt; (whatever); &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;help&lt;/span&gt;&lt;/code&gt; (help); &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/JDCTechTips/2002/tt0409.html"&gt;http://developer.java.sun.com/developer/JDCTechTips/2002/tt0409.html&lt;/a&gt;&lt;br&gt; Assertions (Page last updated April 2002, Added 2002-04-26, Author Glen McCluskey, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l238 level1 lfo82'&gt;Disabled assertions add a cost of one check of      a global state flag &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l238 level1 lfo82'&gt;Enabled assertions add a cost of a check of a      global state flag and evaluating the boolean expression. Also the cost of      throwing a new exception is added if the assertion fails. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l238 level1 lfo82'&gt;Use the conditional compilation idiom applied      to assertions to remove assertions completely from the bytecode. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://dcb.sun.com/practices/devnotebook/gc_perspective.jsp"&gt;http://dcb.sun.com/practices/devnotebook/gc_perspective.jsp&lt;/a&gt;&lt;br&gt; GC performance tuning (Page last updated February 2002, Added 2002-03-25, Author Alka Gupta and Michael Doyle, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;The point when garbage collection kicks in is      out of the control of the application. This can cause a sequential      overhead on the application, as the garbage collector suspends all      application threads when it runs, causing inconsistent and unacceptable      application pauses, leading to high latency and decreased application      efficiency. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;verbosegc provides detailed logs of the      garbage collector activities &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;The live &amp;quot;transient memory      footprint&amp;quot; of an application is the &lt;code&gt;&lt;span style='font-size:      10.0pt'&gt;(Garbage generated per call) * (duration of the call) * (number of      calls per second)&lt;/span&gt;&lt;/code&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;GC pause time caused by two-space collection      of short-lived objects is directly proportional to the size of the memory      space allocated to holding short-lived objects. But smaller available      space can mean more frequent GCs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;Higher frequency GC of short-lived objects can      inadvertently promote short-lived objects to &amp;quot;old&amp;quot; space where      longer lived objects reside [because if the the object is in short-lived      object area for several GCs, then GC decides it's long-lived.] The      promoteAll option will force the GC to assume that any object surviving GC      of young space is long-lived, and is immediately promoted to old space.. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;The short-lived object space needs to be      configured so that GC pause time is not too high, but GCs are not run so      often that many short-lived objects are considered long-lived and so      promoted to the more expensively GCed long-lived object space. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;The long-lived object space needs to be large      enough to avoid an out-of-memory error, but not so high that a full GC of      old space pauses the JVM for too long. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;[Article covers 1.2 and 1.3 GC memory space      models]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;A significant GC value to focus on is the GC      sequential overhead, which is the the percentage of the system time during      which GC is running and application threads are suspended: &lt;code&gt;&lt;span      style='font-size:10.0pt'&gt;(Sequential GC pause time added together) * (100)      / (Total Application run time)&lt;/span&gt;&lt;/code&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;The concurrent garbage collector runs only      most of the &amp;quot;old&amp;quot; space GC concurrently. Some of the      &amp;quot;old&amp;quot; space GC and all the &amp;quot;young&amp;quot; space GC is      sequential. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;GC activity can take hours to settle down to      its final pattern. Fragmentation of old space can cause GC times to      degrade, and it may take a long time for the old space to become      sufficiently fragmented to show this behavior. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;GC options can reduce fragmentation (such as      bestFitFirst). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l236 level1 lfo83'&gt;The promoteAll option produced a significant      improvement in performance [which I find curious]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1412"&gt;http://www.sys-con.com/java/article.cfm?id=1412&lt;/a&gt;&lt;br&gt; Mobile &amp;amp; wireless devices (Page last updated April 2002, Added 2002-04-26, Author James White, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Prototype to determine the performance of your      device. Wireless transmissions require testing to determine if the      transfer rates and processing times are acceptable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Attempt to create applications that can      accomplish 80% or more of their operations through the touch of a single      key/button or the &amp;quot;tap&amp;quot; or touch of the stylus to the screen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Trying to manipulate a very small scroll bar      on a small screen can be an exercise in hand-eye coordination. Horizontal      scrolling should be avoided at all costs. Use &amp;quot;jump-to&amp;quot; buttons      rather than scrollbars. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Try to avoid having the user remember any      data, or worse, having to compare data across screens. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Performance will always be a concern in J2ME. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Avoid garbage generation: Use StringBuffer for      mutable strings; Pool reusable instances of objects like DateFormat; Use      System.gc() to jump-start or push the garbage collection process. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Compile the code with debugging information      turned off using the -g:none switch. This increases performance and      reduces its footprint. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Avoid deep hierarchies in your class      structure. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Consider third-party JVMs, many are faster      than the Sun ones. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l226 level1 lfo84'&gt;Small XML parsers and micro databases are      available for purchase where necessary. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/J2METechTips/2002/tt0226.html"&gt;http://developer.java.sun.com/developer/J2METechTips/2002/tt0226.html&lt;/a&gt;&lt;br&gt; Minimizing bytecode size for J2ME (Page last updated February 2002, Added 2002-03-25, Author Eric Giguere, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l104 level1 lfo85'&gt;Eliminate unnecessary features. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l104 level1 lfo85'&gt;Avoid inner classes: make the main class      implement the required Listener interfaces and handle the callbacks there.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l104 level1 lfo85'&gt;Use built-in classes if functionality is close      enough, and work around their limitations. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l104 level1 lfo85'&gt;Collapse inheritence hierarchies, even if this      means duplicating code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l104 level1 lfo85'&gt;Shorten all names (packages, classes, methods,      data variables). Some obfuscators can do this automatically. MIDP      applications are completely self-contained, so you can use the default      package with no possible name-clash. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l104 level1 lfo85'&gt;Convert array initialization from code to      extract data from a binary string or data file. Array initialization      generates many bytecodes as each element is separately initialized. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://developer.java.sun.com/developer/technicalArticles/Programming/JVMPerf/"&gt;http://developer.java.sun.com/developer/technicalArticles/Programming/JVMPerf/&lt;/a&gt;&lt;br&gt; Sun engineering report on performance tests of various configurations of the 1.2.2 and 1.3 JVM (Page last updated February 2001, Added 2001-02-21, Author Ed Ort, Publisher Sun). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l94 level1 lfo86'&gt;Different versions of the Sun JVM support      different optimization flags. Some flags may allow you to configure the      garbage collector generational spaces. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l94 level1 lfo86'&gt;Configure heap space using -Xms and -Xmx [-ms      and -mx for 1.1.x JVMs] to optimize the JVM heap memory for improved      performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l94 level1 lfo86'&gt;If the JVM supports configuring the garbage collector      generational spaces (-Xgenconfig in 1.2.2; -XX:newSize, -XX:MaxNewSize,      -XX:SurvivorRatio in 1.3), then you can improve performance by specifying      generation spaces more appropriate for your application [you can start      with some appropriate configuration depending on the ratios of short-lived      to medium-lived to long-lived objects, then test multiple configurations      to determine the optimal config]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l94 level1 lfo86'&gt;The 1.3 JVM appears to be faster when run with      the -server flag. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l94 level1 lfo86'&gt;The -Xoptimize flag seems to improve      performance on those 1.2.x JVMs that support it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.jguru.com/jguru/faq/view.jsp?EID=131579"&gt;http://www.jguru.com/jguru/faq/view.jsp?EID=131579&lt;/a&gt;&lt;br&gt; Discussion on JDBC performance (Page last updated August 2000, Added 2001-02-21, Author , Publisher JGuru). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Use a connection pool mechanism whenever      possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Use prepared statements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Use stored procedures. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Select only required columns rather than using      select * from Table xyz. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Always close Statement and ResultSet objects      as soon as possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Work with DatabaseMetaData to get information      about database functionality. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Always catch &lt;em&gt;&lt;span style='font-family:      "Calibri","sans-serif"'&gt;and&lt;/span&gt;&lt;/em&gt; handle database warnings and      exceptions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Time DB queries. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Use the most appropriate datatype specific kinds      of data, e.g. store dates as a date type rather than varchar. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Use scrollable ResultSet (JDBC 2.0). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l304 level1 lfo87'&gt;Stay away from the JDBC-ODBC and other Type 1      drivers where possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.theserverside.com/resources/article.jsp?l=J2EEPerformance"&gt;http://www.theserverside.com/resources/article.jsp?l=J2EEPerformance&lt;/a&gt;&lt;br&gt; Improving J2EE performance (Page last updated May 2002, Added 2002-07-24, Author Scott Marlow, Publisher The Server Side). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Set performance goals before development      starts. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;If supporting clients with slow connections,      consider compressing data for network communication. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Minimize the number of network round trips      required by the application. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;For applications to scale to many users,      minimize the amount of shared memory that requires updating. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Cache data to minimize lookup time, though      this can reduce scalability if locks are required to access the cache. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;If there are more accesses than updates to a      cache, share the access lock amongst all the accessors, though be aware      that this reduces the window for updators to lock the cache. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;For optimum performance, zero shared memory      provides a cache per user. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Be methodical to ensure that changes for      performance do actually improve performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Eliminate memory leaks before tuning execution      speed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Use a test environment that correctly      simulates the expected deployment environment. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Simulate the expected client activity, and      compare the performance against your expected goals. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Consider which metrics to measure, such as:      Max response time under heavy load; CPU utilization under heavy load; How      the application scales as additional users are added. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Profile the application to find the      bottlenecks. Correct bottlenecks by making one change at a time and      testing for improvement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Generate stack traces to look for bottlenecks      which are multi-thread conflicts (waiting for locks). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Improving the performance of a method that is      called 1000 times and takes a tenth of a second on average each call, is      better than improving the performance of a method that is only called 10      times but takes 1 second each call. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l332 level1 lfo88'&gt;Don?t cache data unless you know how and when      to invalidate the cached entries. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://jsl.jcon.org/javaperformance.html"&gt;http://jsl.jcon.org/javaperformance.html&lt;/a&gt;&lt;br&gt; An assortment of tips (Page last updated 2000, Added 2000-10-23, Author Curt Smith, Publisher Smith). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use the Java compiler?s optimization flag      (javac -O) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Profile the application (using -prof) &amp;amp;      re-code the methods that are taking the longest. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Avoid repeatedly instantiating exceptions.      Reuse exceptions in preference. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Move common subexpressions to one execution. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Eliminate casts, or reduce the number of casts      being made. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Method local variables are faster than Class      variables &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Declare method arguments final if they are not      modified in the method. In general declare all variables final if they are      not modified after being initialized or set to some value. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Declare methods private and/or final whenever      that makes sense. This can help the compiler inline methods. [final      methods are of dubious value] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Buffer i/o. Use BufferedReaders. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;DON?T create static strings via new(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use String.intern() to reduce the number of      strings in your runtime. [but this is an expensive operation] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use char[] arrays for all character processing      in loops, rather than using the String or StringBuffer classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;StringBuffer default size is 16 chars. Set this      to the maximum expected string length. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;StringTokenizer is inefficient. It can be      optimized by storing the string and delimiter in a character array instead      of in a String, or by storing the highest delimiter character to allow a      quicker check. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Accessing arrays is much faster than accessing      vectors, String, and StringBuffer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use System.arraycopy() to improve performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Initialize expensive arrays in class static      initializers, and create a per instance copy of this array initialized      with System.arrarycopy(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Vector is convenient to use, but inefficient.      For best performance, use it only when the structure size is unknown, and      efficiency is not a concern. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;When using Vector, ensure that elementAt() is      not used inside a loop. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Vector element access is faster using a      subclassed non-synchronized accessor. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Re-use Vectors by using      Vector.removeAllElements(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Initialize Vector to the maximum expected size.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Re-use Hashtables by using Hashtable.clear(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Set the Hashtable size to be large enough to      hold the expected elements. Use a prime number for table size. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Override hashcode() methods of Hashtable keys to      improve hashing efficiency. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use non-synchronized hash table classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Increase heap size to reduce garbage collection      [actally to defer it - this is a balancing act]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use the -verbosegc option to monitor garbage      collection. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use arrays of smaller datatypes (short rather      than int) is possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Avoid allocating objects in loops (readLine()      is a common example). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Minimizing synchronization may take work, but      can pay off well. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Polling is only acceptable when waiting for      outside events and should be performed in a &amp;quot;side&amp;quot; thread. Use      wait/notify instead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Eliminate calls to synchronized methods (but be      careful of being overly ambitious in this). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;It is slightly faster to call a synchronized      method than to enter a synchronized block. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Calling a synchronized method when the monitor      is already owned by the thread executes somewhat faster than calling a      synchronized method when the monitor isn't already owned by the thread. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Creating objects is expensive. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Consider reusing objects in reuse pools. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Move new(), invariants and constant      conditionals outside of loops. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Unroll loops. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Make tests in loops as simple as possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Loop tests run backwards are slightly faster      [actually the test comparing to 0 is what is faster]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Use local variables, rather than any other type      of variable, in loops. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Combine similar loops. Nest the busiest loop,      if loops are interchangeable. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Convert expressions to table lookups [doesn't      always work]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Cache values that are expensive to fetch or      compute. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Pre-compute results. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Delay computation of results until they are      needed [if the computation comes at a bad time] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l96 level1 lfo89'&gt;Put all one-time initializations into a class      initializer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.nandighosha.org/forum/topic.asp?TOPIC_ID=185&amp;amp;FORUM_ID=10&amp;amp;CAT_ID=2&amp;amp;Topic_Title=Java+performance+tuning+tips&amp;amp;Forum_Title=Java+%2D+Tips+Of+The+Day"&gt;http://www.nandighosha.org/forum/topic.asp?TOPIC_ID=185&amp;amp;FORUM_ID=10&amp;amp;CAT_ID=2&amp;amp;Topic_Title=Java+performance+tuning+tips&amp;amp;Forum_Title=Java+%2D+Tips+Of+The+Day&lt;/a&gt;&lt;br&gt; Various performance tips (Page last updated May 2001, Added 2001-06-18, Author Asha Balasubramanyan, Publisher Nandighosha). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Use buffered I/O. Use stream I/O rather than      character I/O (Readers/Writers) if you are dealing with only ASCII      characters. Avoid premature flushing of buffers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Recycle objects. try to minimize the number of      objects you create in your java programs. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Factor out constant computations from loops.      Push one-time computations into methods called once only. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Use StringBuffer when dealing with mutable strings.      Initialize the StringBuffer with the proper size. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Comparison of two string objects is faster if      they differ in length. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Avoid converting Strings to bytes and back. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;StringTokenizer is slow. Write your own      tokenizer. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Use charAt() instead of StartsWith() in case      you are looking for a single character within a String. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Avoid premature object creation. Creation      should be as close to the actual place of use as possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Avoid initializing twice. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Zeroing buffer contents is not usually      required. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Be careful about the order of evaluation of      expressions with OR and AND conditions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Use ArrayList for non-synchronized Vectors. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Minimize JNI calls in your code. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l67 level1 lfo90'&gt;Minimize calls to Date and related classes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/jw-10-2001/jw-1012-deadlock.html"&gt;http://www.javaworld.com/javaworld/jw-10-2001/jw-1012-deadlock.html&lt;/a&gt;&lt;br&gt; Avoiding synchronization deadlocks (Page last updated October 2001, Added 2001-10-22, Author Brain Goetz, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l312 level1 lfo91'&gt;Deadlocks are difficult to identify from code      analysis, and can occur unexpectedly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l312 level1 lfo91'&gt;Always acquire locks in the same order to      avoid one common cause of deadlocking. If you can guarantee that all locks      will always be acquired in a consistent order, then your program will not      deadlock. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l312 level1 lfo91'&gt;Try to avoid acquiring more than one lock at a      time (though this is usually impractical). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l312 level1 lfo91'&gt;Keep synchronized blocks of code as short as      possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaspecialists.co.za/archive/Issue038a.html"&gt;http://www.javaspecialists.co.za/archive/Issue038a.html&lt;/a&gt;&lt;br&gt; Counting object creation (Page last updated December 2001, Added 2002-02-22, Author Heinz M. Kabutz, Publisher Kabutz). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l308 level1 lfo92'&gt;Add a counter in to the Object constructor to      trace object creation. Doesn't trace arrays [nor objects created from      deserialization]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1149"&gt;http://www.sys-con.com/java/article.cfm?id=1149&lt;/a&gt;&lt;br&gt; Performance tuning (Page last updated September 2001, Added 2001-10-22, Author James McGovern, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Often there's a trade-off between designing for      reuse and designing for performance. Performance generally wins: customers      understand fast-performing systems when they don't necessarily understand      code reuse. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Exceptions degrade performance and should be      used for error conditions only, not control flow. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Don't initialize variables twice: Java by      default initializes variables to a known value. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Use the factory pattern to enable reuse or      cloning of objects. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Make classes final. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Use local variables as much as possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Use non-blocking I/O (available from 1.4, or      use www.cs.berkeley.edu/~mdw/proj/java-nbio/download.html for earlier      versions). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Create/Use method interfaces that reduce      overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Use bit-shifting instead of multiplication or      division by powers of two. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Choose the JVM that runs your application      fastest. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Use clustering application servers. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Avoid stateful sessions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Profile and tune the application (architecture      and code). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Set aside at least 20% of the total project      time for performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l71 level1 lfo93'&gt;Make sure your QA environment mirrors your      production environment, and your QA procedure tests the application at      different loads, including a low and fully scaled loads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/weblogic/article.cfm?id=58"&gt;http://www.sys-con.com/weblogic/article.cfm?id=58&lt;/a&gt;&lt;br&gt; Why CMP is better than BMP (Page last updated April 2002, Added 2002-04-26, Author Tyler Jewell, Publisher Weblogic Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l128 level1 lfo94'&gt;Use CMP except in specific cases when BMP is      necessary: fields use stored procedures; persistence is not simple JDBC      (e.g. JDO); One bean maps to multiple tables; non-standard SQL is used. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l128 level1 lfo94'&gt;CMP can make many optimizations: optimal      locking; optimistic transactions; efficient lazy loading; efficiently      combining multiple queries to the same table (i.e. multiple beans of the      same type can be handled together); optimized multi-row deletion to handle      deletion of beans and their dependents. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.theserverside.com/resources/article.jsp?l=Building-Sclable-Recoverable-Applications"&gt;http://www.theserverside.com/resources/article.jsp?l=Building-Sclable-Recoverable-Applications&lt;/a&gt;&lt;br&gt; Scalable recoverable applications (Page last updated May 2002, Added 2002-07-24, Author Billy Newport, Publisher The Server Side). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;[Article describes several approaches to      building a scalable recoverable system] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;Split the application into a transactional part      and a non-transactional part. The non-transactional part can be replicated.      &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;Using a single machine limits both reliability      and scalability. Scalability is completely dependent on how powerful the      single machine can become. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;Multiple front-end machines with http request      load balancing is more reliable, but the database machine is still a      single point of failure. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;A database caching layer in the servlet helps      performance. An EJB caching layer is difficult to achieve. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;Oracle 9i includes queryable snapshots of the      main database which can offload the query to run against the clients local      snapshot. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;An in-memory database (such as TimesTen) is      very, very fast and can act as a queryable cache for a back end database. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;Database instances on each machine, with      replication increases reliability and access speed. But updates now need      to be handled differently. Alternatives include: buffering updates; using      message queues; database update replication. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;Partitioning the database across multiple      machines adds scalability, but must be done with care. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;If you want very reliable systems then everything      has to be controlled. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;A load balancing message queue may be needed      for a high rate of messages (&amp;gt;500/sec). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l19 level1 lfo95'&gt;Note that reliable systems should ensure that      all duplicated data have no single points of failure in the software or      hardware chain behind the data (different controllers, UPSs, etc). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sys-con.com/java/article.cfm?id=1133"&gt;http://www.sys-con.com/java/article.cfm?id=1133&lt;/a&gt;&lt;br&gt; Techniques to avoid deadlocks (Page last updated September 2001, Added 2001-10-22, Author Mark Dykstra, Publisher Java Developers Journal). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l149 level1 lfo96'&gt;Potential deadlocks can be caused by coding      styles. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l149 level1 lfo96'&gt;Always acquire a set of locks in the same set      order. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l149 level1 lfo96'&gt;Don't hold a lock and wait for an event. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l149 level1 lfo96'&gt;Specify which thread should have access to data      at any time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l149 level1 lfo96'&gt;Ensure that both access and update to the same      variable is synchronized on the same monitor. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/excerpt/bldgjavaent_8/index3.html"&gt;http://www.onjava.com/pub/a/onjava/excerpt/bldgjavaent_8/index3.html&lt;/a&gt;&lt;br&gt; Stateful to Stateless Bean (Page last updated February 2002, Added 2002-03-25, Author Brett McLaughlin, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l80 level1 lfo97'&gt;Stateless session beans are much more efficient      than stateful session beans. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l80 level1 lfo97'&gt;Stateless session bean have no state. Most      containers have pools of stateless beans. Each stateless bean instance can      serve multiplw clients, so the bean pool can be kept small, and doesn't      need to change in size avoiding the main pooling overheads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l80 level1 lfo97'&gt;A separate stateful bean instance must exist      for every client, making bean pools larger and more variable in size. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l80 level1 lfo97'&gt;[Article discusses how to move a stateful bean      implementation to stateless bean implementtaion]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.ddj.com/documents/ddj0204a/"&gt;http://www.ddj.com/documents/ddj0204a/&lt;/a&gt;&lt;br&gt; Alternatives to using 'new'. (Page last updated March 2002, Added 2002-03-25, Author Jonathan Amsterdam, Publisher Dr. Dobb's). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;The 'new' operator is not object oriented, and      prevents proper polymorphic object creation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;Constructors must be made non-public and      preferably private to limit the number of objects of a class. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;The Singleton pattern and the Flyweight (object      factory) pattern are useful to limit numbers of objects of various types      and to assist with object reuse and reduce garbage collection. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;The real-time specification for Java allows      'new' to allocate objects in a 'current memory region', which may be other      than the heap. Each such region is a type of MemoryArea, which can manage      allocation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;Using variables to provide access to limited      numbers of objects is efficient, but a maintenance problem if you need to      change the object access pattern, for example from a global singleton to a      ThreadLocal Singleton. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;A non-static factory method is polymorphic and      so provides many advantages over static factory methods. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;The Abstract Factory design pattern uses a      single class to create more than one kind of object. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;An alternative to the Flyweight pattern is the      Prototype pattern, which allows polymorphic copies of existing objects.      The Object.clone() method signature provides support for the Prototype      pattern. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;Prototypes are useful when object      initialization is expensive, and you anticipate few variations on the      initialization parameters. Then you could keep already-initialized objects      in a table, and clone an existing object instead of expensively creating a      new one from scratch. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l85 level1 lfo98'&gt;Immutable objects can be returned directly when      using Prototyping, avoiding the copying overhead. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javacoffeebreak.com/articles/network_timeouts/index.html"&gt;http://www.javacoffeebreak.com/articles/network_timeouts/index.html&lt;/a&gt;&lt;br&gt; Timing out sockets (Page last updated 2000, Added 2001-06-18, Author David Reilly, Publisher JavaCoffeeBreak). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l14 level1 lfo99'&gt;Use a timer thread to monitor socket activity and      timeout if blocked. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l14 level1 lfo99'&gt;Use the socket option SO_TIMEOUT, set by using      the setSoTimeout() method, to automatically timeout blocked sockets. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaspecialists.co.za/archive/Issue001.html"&gt;http://www.javaspecialists.co.za/archive/Issue001.html&lt;/a&gt;&lt;br&gt; Deadlocks (Page last updated November 2000, Added 2002-04-26, Author Heinz M. Kabutz, Publisher Kabutz). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l272 level1 lfo100'&gt;Use CTRL+BREAK to get a thread dump when a      deadlock occurs, to find where the deadlock is. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l272 level1 lfo100'&gt;Use SwingUtlities.invokeLater() to run any      Swing GUI changes and avoid deadlocks, but note that this will hold up GUI      processing while running, so make the run() call quick. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l272 level1 lfo100'&gt;Use SwingUtilities.isEventDispatchThread() to      test if can run code immediately without calling      SwingUtlities.invokeLater(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/java/library/j-load"&gt;http://www.ibm.com/developerworks/java/library/j-load&lt;/a&gt;&lt;br&gt; Load testing of web applications (Page last updated June 2001, Added 2001-06-18, Author Frank Cohen, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l107 level1 lfo101'&gt;Current Web-application architectures      consists many small servers that are accessed through a load balancer,      providing a front-end to a powerful database server. This architecture      provides a foundation for achieving good performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l107 level1 lfo101'&gt;Load testing of web applications should      include: State machine testing (entries in a shopping basket, should still      be there when checked out); Really long session testing (session started      then continued several hours later); Hordes of savage users testing (users      do lots nonsensical activity); Privileged testing (only some users should      be able to access some functionality); Speed testing (do tasks complete      within the required times?). Each type of test should be run with several      different user loads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l107 level1 lfo101'&gt;Test suites should be automated and easily      changed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l107 level1 lfo101'&gt;[Article discusses &lt;em&gt;&lt;span      style='font-family:"Calibri","sans-serif"'&gt;Load&lt;/span&gt;&lt;/em&gt;, an      open-source set of tools with XML scripting language] &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.javaworld.com/javaworld/javaone01/j1-01-patterns.html"&gt;http://www.javaworld.com/javaworld/javaone01/j1-01-patterns.html&lt;/a&gt;&lt;br&gt; J2EE design patterns to improve performance (Page last updated June 2001, Added 2001-06-18, Author Daniel H. Steinberg, Publisher JavaWorld). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l147 level1 lfo102'&gt;Combine multiple remote calls for state      information into one call using a value object to wrap the data (the Value      Object pattern, superceded by local interfaces in EJB 2.0). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l147 level1 lfo102'&gt;Where long lists of data are returned by      queries, use the Page-by-Page Iterator pattern: a server-side object that      holds data on the server and supplies batches of results to the client. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2001/12/19/oraclejdbc.html"&gt;http://www.onjava.com/pub/a/onjava/2001/12/19/oraclejdbc.html&lt;/a&gt;&lt;br&gt; Oracle JDBC tips (Page last updated December 2001, Added 2001-12-26, Author Donald Bales, Publisher OnJava). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l199 level1 lfo103'&gt;Although Oracle recommend using the OCI      driver for optimal client side access, the writer finds the Thin driver to      have have better performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l199 level1 lfo103'&gt;Turn off autocommit,      Connection.setAutoCommit(false). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l199 level1 lfo103'&gt;From the client side, Statement is faster      than PreparedStatement (except if you are batching statements) when using      dynamic SQL. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l199 level1 lfo103'&gt;Use PreparedStatements for all, except      dynamic, SQL statements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l199 level1 lfo103'&gt;Use PreparedStatements for batching      repetitive inserts or updates. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l199 level1 lfo103'&gt;OraclePreparedStatement.setExecuteBatch()      (proprietary method) is the fastest way to execute batch statements. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l199 level1 lfo103'&gt;Use SQL's set based processing capabilities      to operate on multiple rows simultaneuosly, rather than blindly operating      on one row at a time as the simplest Java-RDB architectural mapping will      produce. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.oreilly.com/catalog/jorajdbc/chapter/ch19.html"&gt;http://www.oreilly.com/catalog/jorajdbc/chapter/ch19.html&lt;/a&gt;&lt;br&gt; Chapter 19, &amp;quot;Performance&amp;quot; of Java Programming with Oracle JDBC (Page last updated December 2001, Added 2001-12-26, Author Donald Bales, Publisher O'Reilly). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;Performance should be considered at the start      of a project. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;Use the EXPLAIN PLAN facility to explain how the      database's optimizer plans to execute your SQL statements, to identify      performance improvements such as additional indexes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;If more than one SQL statement is executed by      your program, you can gain a small performance increase by turning off      auto-commit. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;It takes about 65 iterations of a prepared      statement before its total time for execution catches up with a statement,      because of prepared statement initialization overheads. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;Use PreparedStatements to batch statements      for optimal performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;The Thin driver is faster than the OCI      driver. This is contrary to Oracle's recommendation. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;A SELECT statement makes two round trips to      the database, the first for metadata, the second for data. Use      OracleStatement.defineColumnType() to predefine the SELECT statement, thus      providing the JDBC driver with the column metadata which then doesn't      require the first database trip. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l191 level1 lfo104'&gt;Given a simple SQL statement and a stored      procedure call that accomplishes the same task, the simple SQL statement      will always execute faster because the stored procedure executes the same      SQL statement but also has the overhead of the procedure call itself. On      the other hand complex tasks requiring several SQL statements can be      faster using stored procedures as fewer network trips and data transfers      will be needed. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.fawcette.com/javapro/2002_01/magazine/columns/weblication/"&gt;http://www.fawcette.com/javapro/2002_01/magazine/columns/weblication/&lt;/a&gt;&lt;br&gt; Database performance (Page last updated December 2001, Added 2001-12-26, Author Peter Varhol, Publisher JavaPro). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l227 level1 lfo105'&gt;Thoughtful page design makes for a better      user experience by enabling the application to seem faster than it really      is. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l227 level1 lfo105'&gt;Use the flush method associated with the out      object to display static text and graphics on the browser page before the      database query returns, to prevent the user from having to look at a blank      page for a long time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l227 level1 lfo105'&gt;ResultSet types affect updates.      TYPE_FORWARD_ONLY: no updating allowed; TYPE_SCROLL-SENSITIVE: update      immediately; TYPE_SCROLL_INSENSITIVE: update when the connection is      closed. (Concurrency type must be set to CONCUR-UPDATABLE to allow the      table to be updated.) &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l227 level1 lfo105'&gt;Performance can be better if changes to the      database are batched: turn off autocommit; add multiple SQL statements      using the Statement.addBatch() method; execute Statement.executeBatch(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l227 level1 lfo105'&gt;Scaled systems need optimized SQL calls,      querying the right amount of data, and displaying pages before the query      is complete. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l227 level1 lfo105'&gt;Prepared statements also speed up database      access, and should be used if a statement is to be executed more than      once. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www-105.ibm.com/developerworks/education.nsf/java-onlinecourse-bytitle/56A6275393F0BE5786256AFD004DBBB4?OpenDocument"&gt;http://www-105.ibm.com/developerworks/education.nsf/java-onlinecourse-bytitle/56A6275393F0BE5786256AFD004DBBB4?OpenDocument&lt;/a&gt;&lt;br&gt; JDBC tutorial (requires free registration) (Page last updated November 2001, Added 2001-12-26, Author Robert J. Brunner, Publisher IBM). Tips: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;ul type=disc&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;Type 1 (JDBC-ODBC-DB) drivers incur a performance      penalty because of the bridging needed to reach the database. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;[Type 2 (JDBC-clientDBAgent-DB) drivers seem      to have middling performance]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;Type 3 (JDBC-Middleware-DB) drivers incur a      performance penalty because of the bridging needed to reach the database,      but does introduce optimization potential from the location of the      middleware. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;Type 4 (JDBC-DB) drivers typically provide      optimum driver performance. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;The higher the level of transaction      protection, the higher the performance penalty. Transaction levels in      order of increasing level are: TRANSACTION_NONE,      TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED,      TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE. Use      Connection.setTransactionIsolation() to set the desired tansaction level. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;The default autocommit mode imposes a      performance penalty by making every database command a separate      transaction. Turn off autocommit (Connection.setAutoCommit(false)), and      explicitly specify transactions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;Batch operations by combining them in one      transaction, and in one statement using Statement.addBatch() and      Statement.executeBatch(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;Savepoints (from JDBC3.0) require expensive      resources. Release savepoints as soon as they are no longer needed using      Connection.releaseSavepoint(). &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;      mso-list:l35 level1 lfo106'&gt;Each request for a new database connection      involves significant overhead. This can impact performance if obtaining      new connections occurs frequently. Reuse connections from connection pools      to limit the cost of creating connections. [The tutorial lists all the      overheads involved in creating a database connection]. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;  &lt;li class=MsoNor
