Goingmm

  BlogJava :: 首页 :: 新随笔 ::  :: 聚合  :: 管理 ::
  82 随笔 :: 15 文章 :: 452 评论 :: 0 Trackbacks

 
  申请这个blog很长时间了.一直没有机会发点帖子(一直想写点自己的东西,但是没有能找到合适的主题).今天被同事"嘲笑了一盘".那就来吧,留下点出没过的痕迹.
      
小议: J2EE项目 编码调优

  眼下很多j2ee项目性能不佳的主要瓶颈并不是发生在编码.但是无谓的系统开销,纠缠不清,饶来饶去的业务逻辑.这些都是可以避免的.可能每一个程序员都希望自己能写出高效的,漂亮的代码吧.至少我是带着这点想法,开始寻求解决办法的...
     
 下面的部分内容是针对实际项目中遇到的情况.举例一些例子,只是为了更好的表达僵硬的描述.

 1) 避免对象的重复创建

  ■ 对象的创建对于系统内存而言是非常昂贵的.在非必要的时候应该避免重复创建对象.需要的时候声明它,初始化它,不要重复初始化一个对象,尽量
   能做到再使用,而用完后置null有利于垃圾收集。
    
       比如: request.getSession().removeAttribute("XXXX_XXXX");
      ................................................ ;
     修改: HttpSession obj = request.getSession();
      obj.removeAttribute("XXXX_XXXX");
      ............................... ;
      obj = null;

  ■ 避免方法的非必要重复调用
    比如:
      for(int i=0;i    修改:
      int size = obj.size();
                          for(int i=0;i

  ■ 让类实现Cloneable接口,同时采用工厂模式,将减少类的创建,每次都是通过clone()方法来获得对象。
  ■ 另外使用接口也能减少类的创建
  ■ 对于成员变量的初始化也应尽量避免,特别是在一个类派生另一个类时.

2)  使用合适的类型
   当原始类型不能满足我们要求时,使用复杂类型。String和StringBuffer的区别自不必说了,是我们使用最多的类型,在涉及到字符运算时,强烈建议使
  用StringBuffer。在做String匹配时使用intern()代替equal().
  
   +--------------------------------------------------------------
   |  关于 public native String intern() :
   |  返回一个字符串对象的规范表示法。
   |  如果 s 和 t 是 s.equals(t) 类型的字符串,那就保证了 s.intern() == t.intern()
   | 返回:
   |      一个同该字符串内容相同的字符串,但是来自于唯一字符串的缓冲池
   +-----------------------------------------------------------------

3)  常用容器的选择
     ArrayList和Vector,HashMap和Hashtable是我们经常用到的类,前者不支持同步,后者支持同步,前者性能更好,大多数情况下选择前者

4)  final 的使用
      带有final修饰符的类是不可派生的, 如果指定一个类为final,则该类所有的方法都是final,Java编译器会寻找机会内联所有的final方法,
 这将能够使性能平均提高50%。类的属性和方式 使用final或者static修饰符也是有好处的,但是一定要慎用,对他的使用需要做性能和后
 果权衡.
  
   建议InitXxxAction中:需要拿一些parameter的时候可以写成final的"小方法".
   比如:
  private final WebForward retrieveParam(WebActionMapping mapping,HttpServletRequest request){
         // TODO....
  }

5)调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。所以尽量使用局部变量

6)不要误用了 异常  
        异常抛出对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为,fillInStackTrace()的本地(Native)
  方法fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一
  个新的对象。异常只能用于错误处理,不要试图用来控制程序流程.

7)善用调试
         ■ 代码中不要留下硬调语句 比如: System.out.println()  
         ■ 应该选用和配置的调试工具.实施后都应该关闭输出 比如:log4j
         ■ 尽量少用串行化、同步操作和耗时昂贵的服务 比如:Date()


  暂时写下这些吧!第一次写blog感觉有点累人呢!有什么新的体会再补充...

 

 

 

posted on 2005-10-09 17:35 Goingmm 阅读(360) 评论(2)  编辑  收藏 所属分类: Java

评论

# re: J2EE项目 编码调优 2005-10-09 17:48 Noshoeman
性感的沙发~~  回复  更多评论
  

# re: J2EE项目 编码调优 2005-10-26 10:05 9527
有些有道理,有些值得商榷......  回复  更多评论
  


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


网站导航: