﻿<?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-天道酬勤 tiān dào chóu qín</title><link>http://www.blogjava.net/abram/</link><description>天将降大任于斯人也，必将苦其心志，劳其筋骨          
宠辱不惊，看庭上花开花落；去留无意，望天上云卷云舒</description><language>zh-cn</language><lastBuildDate>Sun, 21 Jun 2026 18:53:35 GMT</lastBuildDate><pubDate>Sun, 21 Jun 2026 18:53:35 GMT</pubDate><ttl>60</ttl><item><title>使用 Spring 2.5 注释驱动的 IoC 功能</title><link>http://www.blogjava.net/abram/articles/286134.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Thu, 09 Jul 2009 10:32:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/286134.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/286134.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/286134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/286134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/286134.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/abram/aggbug/286134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-09 18:32 <a href="http://www.blogjava.net/abram/articles/286134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 Spring 2.5 TestContext 测试框架</title><link>http://www.blogjava.net/abram/articles/286133.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Thu, 09 Jul 2009 10:29:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/286133.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/286133.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/286133.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/286133.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/286133.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关键字: spring概述&nbsp;Spring 2.5 相比于 Spring 2.0 所新增的最重要的功能可以归结为以下 3 点：&nbsp;1.基于注解的 IoC 功能；&nbsp;2.基于注解驱动的 Spring MVC 功能；&nbsp;3.基于注解的 TestContext 测试框架。&nbsp;Spring 推荐开发者使用新的基于注解的 TestC...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/286133.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/286133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-09 18:29 <a href="http://www.blogjava.net/abram/articles/286133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过JDBC连接oracle数据库的十大技巧</title><link>http://www.blogjava.net/abram/articles/286132.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Thu, 09 Jul 2009 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/286132.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/286132.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/286132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/286132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/286132.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">　Java数据库连接（JDBC）API是一系列能够让Java编程人员访问数据库的接口，各个开发商的接口并不完全相同。在使用多年的Oracle公司的JDBC后，我积累了许多技巧，这些技巧能够使我们更好地发挥系统的性能和实现更多的功能。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">1、在客户端软件开发中使用Thin驱动程序&nbsp;</strong><br />
在开发Java软件方面，Oracle的数据库提供了四种类型的驱动程序，二种用于应用软件、applets、servlets等客户端软件，另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中，我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口（JNI），通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序，它直接与数据库进行通讯。为了获得最高的性能，Oracle建议在客户端软件的开发中使用OCI驱动程序，这似乎是正确的。但我建议使用Thin驱动程序，因为通过多次测试发现，在通常情况下，Thin驱动程序的性能都超过了OCI驱动程序。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">2、关闭自动提交功能，提高系统性能&nbsp;</strong><br />
在第一次建立与数据库的连接时，在缺省情况下，连接是在自动提交模式下的。为了获得更好的性能，可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能，如下所示：&nbsp;<br />
<br />
<br />
conn.setAutoCommit(false);&nbsp;<br />
<br />
值得注意的是，一旦关闭了自动提交功能，我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">3、在动态SQL或有时间限制的命令中使用Statement对象&nbsp;</strong><br />
在执行SQL命令时，我们有二种选择：可以使用PreparedStatement对象，也可以使用Statement对象。无论多少次地使用同一个SQL命令，PreparedStatement都只对它解析和编译一次。当使用Statement对象时，每次执行一个SQL命令时，都会对它进行解析和编译。这可能会使你认为，使用PreparedStatement对象比使用Statement对象的速度更快。然而，我进行的测试表明，在客户端软件中，情况并非如此。因此，在有时间限制的SQL操作中，除非成批地处理SQL命令，我们应当考虑使用Statement对象。&nbsp;<br />
<br />
此外，使用Statement对象也使得编写动态SQL命令更加简单，因为我们可以将字符串连接在一起，建立一个有效的SQL命令。因此，我认为，Statement对象可以使动态SQL命令的创建和执行变得更加简单。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">4、利用helper函数对动态SQL命令进行格式化&nbsp;</strong><br />
在创建使用Statement对象执行的动态SQL命令时，我们需要处理一些格式化方面的问题。例如，如果我们想创建一个将名字O'Reilly插入表中的SQL命令，则必须使用二个相连的&#8220;''&#8221;号替换O'Reilly中的&#8220;'&#8221;号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法，然后在连接字符串心服用公式表达一个SQL命令时，使用创建的helper方法。与此类似的是，我们可以让helper方法接受一个Date型的值，然后让它输出基于Oracle的to_date()函数的字符串表达式。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">5、利用PreparedStatement对象提高数据库的总体效率&nbsp;</strong><br />
在使用PreparedStatement对象执行SQL命令时，命令被数据库进行解析和编译，然后被放到命令缓冲区。然后，每当执行同一个PreparedStatement对象时，它就会被再解析一次，但不会被再次编译。在缓冲区中可以发现预编译的命令，并且可以重新使用。在有大量用户的企业级应用软件中，经常会重复执行相同的SQL命令，使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务，我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">6、在成批处理重复的插入或更新操作中使用PreparedStatement对象&nbsp;</strong><br />
<br />
<br />
如果成批地处理插入和更新操作，就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理，只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理，或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制，可以以如下所示的方式调用setExecuteBatch()：&nbsp;<br />
<br />
PreparedStatement pstmt3D null;&nbsp;<br />
try {&nbsp;<br />
((OraclePreparedStatement)&nbsp;<br />
pstmt).setExecuteBatch(30);&nbsp;<br />
...&nbsp;<br />
pstmt.executeUpdate();&nbsp;<br />
}&nbsp;<br />
<br />
调用setExecuteBatch()时指定的值是一个上限，当达到该值时，就会自动地引发SQL命令执行，标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">7、使用Oracle locator方法插入、更新大对象（LOB）&nbsp;</strong><br />
Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理，尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值，也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB，但需要使用locator才能获取LOB的值。由于存在这二个问题，因此，我建议使用locator的方法来插入、更新或获取LOB的值。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">8、使用SQL92语法调用存储过程&nbsp;</strong><br />
在调用存储过程时，我们可以使用SQL92或Oracle PL/SQL，由于使用Oracle PL/SQL并没有什么实际的好处，而且会给以后维护你的应用程序的开发人员带来麻烦，因此，我建议在调用存储过程时使用SQL92。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">9、使用Object SQL将对象模式转移到数据库中&nbsp;</strong><br />
既然可以将Oracle的数据库作为一种面向对象的数据库来使用，就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象，将它们的属性映射到关系表中，然后在这些bean中添加方法。尽管这样作在Java中没有什么问题，但由于操作都是在数据库之外进行的，因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术，可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作，然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式，不但Java应用程序可以使用应用软件的对象模式，其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。&nbsp;<br />
<br />
<strong style="font-weight: bold; ">10、利用SQL完成数据库内的操作&nbsp;</strong><br />
我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求，而不是使用Java等过程化的编程语言。&nbsp;<br />
<br />
如果编程人员要在一个表中查找许多行，结果中的每个行都会查找其他表中的数据，最后，编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务，何必要让数据在网上流来流去的？我建议用户认真学习如何最大限度地发挥SQL的功能。&nbsp;</span>
<img src ="http://www.blogjava.net/abram/aggbug/286132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-09 18:26 <a href="http://www.blogjava.net/abram/articles/286132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate 分布式事务的例子</title><link>http://www.blogjava.net/abram/articles/286131.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Thu, 09 Jul 2009 10:25:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/286131.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/286131.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/286131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/286131.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/286131.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 对于横跨多个Hibernate SessionFacotry的分布式事务，只需简单地将 JtaTransactionManager 同多个 LocalSessionFactoryBean 的定义结合起来作为事务策略。你的每一个DAO通过bean属性得到各自的 SessionFactory 引用。如果所有的底层JDBC数据源都是支持事务的容器，那么只要业务对象使用了 JtaTransactionMa...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/286131.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/286131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-09 18:25 <a href="http://www.blogjava.net/abram/articles/286131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA 性能优化 “通用篇”</title><link>http://www.blogjava.net/abram/articles/286130.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Thu, 09 Jul 2009 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/286130.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/286130.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/286130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/286130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/286130.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">&#8220;通用篇&#8221;讨论的问题适合于大多数Java应用。&nbsp;<br />
<br />
1.1 不用new关键词创建类的实例&nbsp;<br />
<br />
用new关键词创建类的实例时，构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口，我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。&nbsp;<br />
<br />
在使用设计模式（Design Pattern）的场合，如果用Factory模式创建对象，则改用clone()方法创建新的对象实例非常简单。例如，下面是Factory模式的一个典型实现：&nbsp;<br />
<br />
<div class="dp-highlighter" style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; ">
<div class="bar">
<div class="tools" style="padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: black; font-weight: bold; ">Java代码&nbsp;<embed src="http://guoli83945.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=public%20static%20Credit%20getNewCredit()%20%0A%7B%0A%E3%80%80return%20new%20Credit()%3B%0A%7D%20" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div>
</div>
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span class="keyword" style="color: #7f0055; font-weight: bold; ">public</span><span style="color: black; ">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold; ">static</span><span style="color: black; ">&nbsp;Credit&nbsp;getNewCredit()&nbsp;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">{&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">　<span class="keyword" style="color: #7f0055; font-weight: bold; ">return</span><span style="color: black; ">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold; ">new</span><span style="color: black; ">&nbsp;Credit();&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
改进后的代码使用clone()方法，如下所示：&nbsp;<br />
<br />
<div class="dp-highlighter" style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; ">
<div class="bar">
<div class="tools" style="padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: black; font-weight: bold; ">Java代码&nbsp;<embed src="http://guoli83945.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=private%20static%20Credit%20BaseCredit%20%3D%20new%20Credit()%3B%0Apublic%20static%20Credit%20getNewCredit()%20%0A%7B%0A%E3%80%80return%20(Credit)%20BaseCredit.clone()%3B%0A%7D%20" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div>
</div>
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span class="keyword" style="color: #7f0055; font-weight: bold; ">private</span><span style="color: black; ">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold; ">static</span><span style="color: black; ">&nbsp;Credit&nbsp;BaseCredit&nbsp;=&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold; ">new</span><span style="color: black; ">&nbsp;Credit();&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span class="keyword" style="color: #7f0055; font-weight: bold; ">public</span><span style="color: black; ">&nbsp;</span><span class="keyword" style="color: #7f0055; font-weight: bold; ">static</span><span style="color: black; ">&nbsp;Credit&nbsp;getNewCredit()&nbsp;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">{&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">　<span class="keyword" style="color: #7f0055; font-weight: bold; ">return</span><span style="color: black; ">&nbsp;(Credit)&nbsp;BaseCredit.clone();&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
上面的思路对于数组处理同样很有用。&nbsp;<br />
<br />
1.2 使用非阻塞I/O&nbsp;<br />
<br />
版本较低的JDK不支持非阻塞I/O API。为避免I/O阻塞，一些应用采用了创建大量线程的办法（在较好的情况下，会使用一个缓冲池）。这种技术可以在许多必须支持并发I/O流的应用中见到，如Web服务器、报价和拍卖应用等。然而，创建Java线程需要相当可观的开销。&nbsp;<br />
<br />
JDK 1.4引入了非阻塞的I/O库（java.nio）。如果应用要求使用版本较早的JDK，在这里有一个支持非阻塞I/O的软件包。&nbsp;<br />
<br />
1.3 慎用异常&nbsp;<br />
<br />
异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地（Native）方法，fillInStackTrace()方法检查堆栈，收集调用跟踪信息。只要有异常被抛出，VM就必须调整调用堆栈，因为在处理过程中创建了一个新的对象。&nbsp;<br />
<br />
异常只能用于错误处理，不应该用来控制程序流程。&nbsp;<br />
<br />
1.4 不要重复初始化变量&nbsp;<br />
<br />
默认情况下，调用类的构造函数时，Java会把变量初始化成确定的值：所有的对象被设置成null，整数变量（byte、short、int、long）设置成0，float和double变量设置成0.0，逻辑值设置成false。当一个类从另一个类派生时，这一点尤其应该注意，因为用new关键词创建一个对象时，构造函数链中的所有构造函数都会被自动调用。&nbsp;<br />
<br />
1.5 尽量指定类的final修饰符&nbsp;<br />
<br />
带有final修饰符的类是不可派生的。在Java核心API中，有许多应用final的例子，例如java.lang.String。为String类指定final防止了人们覆盖length()方法。&nbsp;<br />
<br />
另外，如果指定一个类为final，则该类所有的方法都是final。Java编译器会寻找机会内联（inline）所有的final方法（这和具体的编译器实现有关）。此举能够使性能平均提高50%。&nbsp;<br />
<br />
1.6 尽量使用局部变量&nbsp;<br />
<br />
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈（Stack）中，速度较快。其他变量，如静态变量、实例变量等，都在堆（Heap）中创建，速度较慢。另外，依赖于具体的编译器/JVM，局部变量还可能得到进一步优化。请参见《尽可能使用堆栈变量》。&nbsp;<br />
<br />
1.7 乘法和除法&nbsp;<br />
<br />
考虑下面的代码：&nbsp;<br />
<br />
<div class="dp-highlighter" style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; ">
<div class="bar">
<div class="tools" style="padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: black; font-weight: bold; ">Java代码&nbsp;<embed src="http://guoli83945.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=for%20(val%20%3D%200%3B%20val%20%3C%20100000%3B%20val%20%2B%3D5)%20%0A%7B%0A%E3%80%80alterX%20%3D%20val%20*%208%3B%20%0A%E3%80%80myResult%20%3D%20val%20*%202%3B%20%0A%7D%20" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div>
</div>
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span class="keyword" style="color: #7f0055; font-weight: bold; ">for</span><span style="color: black; ">&nbsp;(val&nbsp;=&nbsp;</span><span class="number" style="color: #c00000; ">0</span><span style="color: black; ">;&nbsp;val&nbsp;&lt;&nbsp;</span><span class="number" style="color: #c00000; ">100000</span><span style="color: black; ">;&nbsp;val&nbsp;+=</span><span class="number" style="color: #c00000; ">5</span><span style="color: black; ">)&nbsp;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">{&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">　alterX&nbsp;=&nbsp;val&nbsp;*&nbsp;<span class="number" style="color: #c00000; ">8</span><span style="color: black; ">;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">　myResult&nbsp;=&nbsp;val&nbsp;*&nbsp;<span class="number" style="color: #c00000; ">2</span><span style="color: black; ">;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代码：&nbsp;<br />
<br />
<div class="dp-highlighter" style="font-family: Consolas, 'Courier New', Courier, mono; font-size: 12px; background-color: transparent; width: 694px; overflow-x: auto; overflow-y: auto; margin-left: 9px; padding-top: 1px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; ">
<div class="bar">
<div class="tools" style="padding-top: 3px; padding-right: 3px; padding-bottom: 3px; padding-left: 3px; text-align: left; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: black; font-weight: bold; ">Java代码&nbsp;<embed src="http://guoli83945.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" flashvars="clipboard=for%20(val%20%3D%200%3B%20val%20%3C%20100000%3B%20val%20%2B%3D%205)%20%0A%7B%0A%E3%80%80alterX%20%3D%20val%20%3C%3C%203%3B%0A%E3%80%80myResult%20%3D%20val%20%3C%3C%201%3B%0A%7D%20" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></div>
</div>
<ol start="1" class="dp-j" style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1px; margin-left: 0px; padding-top: 2px; padding-right: 0px; padding-bottom: 2px; padding-left: 0px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #d1d7dc; border-right-color: #d1d7dc; border-bottom-color: #d1d7dc; border-left-color: #d1d7dc; list-style-type: decimal; list-style-position: initial; list-style-image: initial; background-color: #ffffff; color: #2b91af; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; "><span class="keyword" style="color: #7f0055; font-weight: bold; ">for</span><span style="color: black; ">&nbsp;(val&nbsp;=&nbsp;</span><span class="number" style="color: #c00000; ">0</span><span style="color: black; ">;&nbsp;val&nbsp;&lt;&nbsp;</span><span class="number" style="color: #c00000; ">100000</span><span style="color: black; ">;&nbsp;val&nbsp;+=&nbsp;</span><span class="number" style="color: #c00000; ">5</span><span style="color: black; ">)&nbsp;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">{&nbsp;&nbsp;</span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">　alterX&nbsp;=&nbsp;val&nbsp;&lt;&lt;&nbsp;<span class="number" style="color: #c00000; ">3</span><span style="color: black; ">;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">　myResult&nbsp;=&nbsp;val&nbsp;&lt;&lt;&nbsp;<span class="number" style="color: #c00000; ">1</span><span style="color: black; ">;&nbsp;&nbsp;</span></span></li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa; line-height: 18px; "><span style="color: black; ">}&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
修改后的代码不再做乘以8的操作，而是改用等价的左移3位操作，每左移1位相当于乘以2。相应地，右移1位操作相当于除以2。值得一提的是，虽然移位操作速度快，但可能使代码比较难于理解，所以最好加上一些注释。&nbsp;<br />
<br />
本贴来自ZDNetChina中文社区 http://bbs.zdnet.com.cn ,本贴地址：http://bbs.zdnet.com.cn/viewthread.php?tid=222399&nbsp;</span>
<img src ="http://www.blogjava.net/abram/aggbug/286130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-09 18:24 <a href="http://www.blogjava.net/abram/articles/286130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用maven自动创建数据库,导入导出数据(转)</title><link>http://www.blogjava.net/abram/articles/286129.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Thu, 09 Jul 2009 10:23:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/286129.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/286129.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/286129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/286129.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/286129.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用maven自动创建数据库,导入导出数据需要用到两个插件hibernate3-maven-plugin,dbunit-maven-plugin&nbsp;hibernate3-maven-plugin,有7大功能,(这里我们只使用hbm2ddl,自动生成数据库)&nbsp;The Maven Hibernate3 Plugin has seven goals.&nbsp;hi...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/286129.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/286129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-09 18:23 <a href="http://www.blogjava.net/abram/articles/286129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>疯狂的楼市</title><link>http://www.blogjava.net/abram/archive/2009/07/07/285775.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/abram/archive/2009/07/07/285775.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285775.html</wfw:comment><comments>http://www.blogjava.net/abram/archive/2009/07/07/285775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285775.html</trackback:ping><description><![CDATA[现在的楼价真是太贵了，完全超出我们80后的经济能力，80后真是很辛苦
<img src ="http://www.blogjava.net/abram/aggbug/285775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:22 <a href="http://www.blogjava.net/abram/archive/2009/07/07/285775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇（转）</title><link>http://www.blogjava.net/abram/articles/285773.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285773.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285773.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285773.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在&lt;&lt;ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇&nbsp;&gt;&gt;里面我们比较详细的讲解了ActiveMQ与JBoss的整合,既然选择了JBoss,那么项目里面或多或少...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/285773.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/285773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:16 <a href="http://www.blogjava.net/abram/articles/285773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇 （转）</title><link>http://www.blogjava.net/abram/articles/285772.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285772.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285772.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285772.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp; &nbsp;ActiveMQ本身是开源项目,所以采用ActiveMQ的项目往往也是以其他开源软件共同构建,目前主流开源应用服务器有Boss,geronimo,JOnAs，而其中geronimo 默认的JMS Provider就是ActiveMQ，那我们就着重介绍ActiveMQ与JBoss,JOnAs的整合方案本文参考了&nbsp;Integrating Apache...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/285772.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/285772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:15 <a href="http://www.blogjava.net/abram/articles/285772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实践之路(二) 使用Queue或者Topic发送/接受消息 （转）</title><link>http://www.blogjava.net/abram/articles/285771.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285771.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285771.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285771.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本篇主要讲解在未使用其他框架(Spring)整合情况下,独立基于ActiveMQ,使用JMS规范进行消息通信。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一.JMS回顾&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为ActiveMQ是一个JMS Provider的实现,因此在开始实作前,有必...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/285771.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/285771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:14 <a href="http://www.blogjava.net/abram/articles/285771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>