分享

Java性能的优化(五)

 土土书屋 2013-12-07

Java性能的优化(五)

测试的结果如下(假设标准的时间为1,越小性能越好): 

关于线程的操作,要注意如下几个方面。 

  (1) 防止过多的同步 

  如上所示,不必要的同步常常会造成程序性能的下降。因此,如果程序是单线程,则一定不要使用同步。 

  (2) 同步方法而不要同步整个代码段 

     对某个方法或函数进行同步比对整个代码段进行同步的性能要好。 

  (3) 对每个对象使用多”锁”的机制来增大并发。 

  一般每个对象都只有一个”锁”,这就表明如果两个线程执行一个对象的两个不同的同步方法时,会发生”死锁”。即使这两个方法并不共享任何资源。为了避免这个问题,可以对一个对象实行”多锁”的机制。如下所示: 

  class foo 

  { 

  private static int var1; 

  private static Object lock1=new Object(); 

  private static int var2; 

  private static Object lock2=new Object(); 

  public static void increment1() 

  { 

  synchronized(lock1) 

  { 

  var1++; 

  } 

  } 

  public static void increment2() 

  { 

  synchronized(lock2) 

  { 

  var2++; 

  } 

  } 

  } 

  4.输入和输出(I/O) 

  输入和输出包括很多方面,但涉及最多的是对硬盘,网络或数据库的读写操作。对于读写操作,又分为有缓存和没有缓存的;对于数据库的操作,又可以有多种类型的JDBC驱动器可以选择。但无论怎样,都会给程序的性能带来影响。因此,需要注意如下几点: 

  (1) 使用输入输出缓冲 

     尽可能的多使用缓存。但如果要经常对缓存进行刷新(flush),则建议不要使用缓存。 

  (2) 输出流(Output Stream)和Unicode字符串 

     当时用Output Stream和Unicode字符串时,Write类的开销比较大。因为它要实现Unicode到字节(byte)的转换.因此,如果可能的话,在使用Write类之前就实现转换或用OutputStream类代替Writer类来使用。 

  (3) 当需序列化时使用transient 

     当序列化一个类或对象时,对于那些原子类型(atomic)或可以重建的原素要表识为transient类型。这样就不用每一次都进行序列化。如果这些序列化的对象要在网络上传输,这一小小的改变对性能会有很大的提高。   

  (4) 使用高速缓存(Cache) 

     对于那些经常要使用而又不大变化的对象或数据,可以把它存储在高速缓存中。这样就可以提高访问的速度。这一点对于从数据库中返回的结果集尤其重要。 

  (5) 使用速度快的JDBC驱动器(Driver) 

     JAVA对访问数据库提供了四种方法。这其中有两种是JDBC驱动器。一种是用JAVA外包的本地驱动器;另一种是完全的JAVA驱动器。具体要使用哪一种得根据JAVA布署的环境和应用程序本身来定。 

  5.一些其他的经验和技巧 

  (1) 使用局部变量 

  (2) 避免在同一个类中动过调用函数或方法(get或set)来设置或调用变量。 

  (3) 避免在循环中生成同一个变量或调用同一个函数(参数变量也一样) 

  (4) 尽可能的使用static,final,private等关键字 

  (5) 当复制大量数据时,使用System.arraycopy()命令。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多