﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-迟一步的博客-文章分类-Java文档</title><link>http://www.blogjava.net/horfire/category/11657.html</link><description>就这么简单</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 13:31:22 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 13:31:22 GMT</pubDate><ttl>60</ttl><item><title>避免创建重复对象</title><link>http://www.blogjava.net/horfire/articles/92414.html</link><dc:creator>迟一步</dc:creator><author>迟一步</author><pubDate>Mon, 08 Jan 2007 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/horfire/articles/92414.html</guid><description><![CDATA[作为一个极端的反面例子,如下 <br />String s = new String("silly"); //don't do this!<br /> "silly"本身就是一个String实例一般改进为String s = "silly"; <br /><br />第二个例子<br /> public class Person{<br />     prvate final Date birthDate; //Other fields omitted<br />     public Person(Date birthDate){ <br />        this.birthDate = birthDate; <br />    } <br /><br />    public boolean isBabyBoomer() {<br />        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); <br />        gmtCal.set(1981,Calendar.JANUARY,1,0,0,0); <br />        Date boomStart = gmtCal.getTime(); <br />        gmtCal.set(1991,Calendar.JANUARY,1,0,0,0); <br />        Date boomEnd = gmtCal.getTime(); <br />        return birthDate.compareTo(boomStart) &gt;= 0 &amp;&amp; birthDate.compareTo(boomEnd) &lt; 0; <br />    }<br /> } <br />上面的例程一个bean,<br />只要调用isBabyBoomer就会创建Caledar,TimeZone等等对象,<br />如果方法被频繁调用消耗就很大了每调用100W次,本程序消耗3600ms 我们改进一下<br /> public calss Person{ <br />     private static final Date BOOM_START; <br />     private static final Date BOOM_END; <br />     static{ <br />        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); <br />        gmtCal.set(1981,Calendar.JANUARY,1,0,0,0); <br />        BOOM_START = gmtCal.getTime(); <br />        gmtCal.set(1991,Calendar.JANUARY,1,0,0,0); <br />        BOOM_END = gmtCal.getTime();<br />      } <br />      prvate final Date birthDate; //Other fields omitted <br />      public Person(Date birthDate){ <br />           this.birthDate = birthDate; <br />      } <br />      public boolean isBabyBoomer() {<br />            return birthDate.compareTo(BOOM_START) &gt;= 0 &amp;&amp; birthDate.compareTo(BOOM_END) &lt; 0; <br />      } <br />} <br />本版本每运行100W次消耗时间为370ms比上个版本快100倍.<br />明显看出少创建对象的好处不过第2个版本代价比较昂贵<img src ="http://www.blogjava.net/horfire/aggbug/92414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/horfire/" target="_blank">迟一步</a> 2007-01-08 16:55 <a href="http://www.blogjava.net/horfire/articles/92414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>