在工作中发现 由于程序优化不好所以 做的项目总出现 慢,内存溢出的问题 所以深刻感受到不是实现
效果就完了,更正要的是要有经得起考验的程序。大家都来谈谈吧!请老紫竹支持!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【maojiaqiu】截止到2008-06-27 10:03:47的历史汇总数据(不包括此帖):
    发帖数:19                 发帖分:260                
    结贴数:17                 结贴分:240                
    未结数:2                  未结分:20                 
    结贴率:89.47 %            结分率:92.31 %            
    楼主加油
      

  2.   

    比如说 用StringBuffer 要不用String+=    好!
      

  3.   

    String sentence = "";
    for( int i = 0; i < wordArray.length; i++ ) {
    sentence += wordArray[ i ];
    }
    优化为
    StringBuffer buffer = new StringBuffer( 500 );
    for( int i = 0; i < wordArray.length; i++ ) {
    buffer.append( wordArray[ i ] );
    }
    String sentence = buffer.toString( );
      

  4.   

    用 乘法n*m  不如用位移n<<m  
      

  5.   

    还有
    1.tomcat 在什么样情况下 才回收内存
    2.jsp中使用String 用完是否 赋null
      

  6.   

    1.如果没有线程同步,最好习惯用StringWriter而不是StringBuffer,因为,StringBuffer是线程安全的,所以,效率会稍微低一点.
    当然JDK5以后,还提供了StringBulder,这个类要比StringWriter更好用一些,当然也不是线程安全的.2.数据库查询的结果集处理,我们对数据库操作时,可能会针对里面的数据做处理性质的迁移.一般都是先Select一把,然后把结果集的内容处理,最后Insert或Update回数据库.这个是效率最低下的.无论是否使用Hibernate都很低下.当然,最好是写一个存储过程来完成这件事,我们只是调用一下,触发这个事件就可以了.如果非要自己写程序完成,那么,一定要注意,你在Select的时候,不要将所有数据一次性全都查询出来,要按行数分次处理否则很容易将内存暴掉.因为,这些数据即使你已经处理完了,但是,对象有可能被Map或者Collection的某个对象所引用,这样JVM就无法进行回收.3.程序慢,要找到瓶颈在哪里,这样才能解决.一般是三大部分,一个CPU占用率过高;一个是硬盘访问过于频繁;一个是网络拥塞.
    a.CPU占用又可以分三个部分,一个是tomcat占用过高;一个是数据库占用过高;另一个是其他程序(如远程控制程序)占用过高...tomcat过高,最有可能是处理数据算法效率太低.数据库占用过高,最有可能的是频繁对一个已经很长的表进行了操作(可以通过建临时表来进行缓解,效果不错).其他程序想办法不使用这些程序或再找个空闲的服务器来run这些程序.
    b.一般硬盘访问频繁,CPU是不会过高的.比如有一个循环程序,因数据不合要求总是打印日志,而日志就写在文件里,这样,由于写日志文件而使得处理线程进展缓慢.可以通过对数据进行预处理,来缓解硬盘访问频繁的状况,或者根据特点采用缓冲区,多线程写文件等技术来解决这样的问题.
    c.网络拥塞,看看是否有网络攻击(DOS或者ARP之类的),或者增加带宽.如果是由于联通和电信的互访造成慢的,那么可以考虑使用铁通之类的节点进行中转,效果还算可以.