JBOSS 点滴

丰丰的博客

程序优化

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

posted on 2009-08-14 11:56 半导体 阅读(214) 评论(0)  编辑  收藏 所属分类: JBOSS应用服务器设置


只有注册用户登录后才能发表评论。


网站导航: