• 让JAVA代码跑得更快


      本文简单介绍一下在写代码过程中用到的一些让JAVA代码更高效的技巧.

    1.   将一些系统资源放在池中(如数据库连接, 线程等)

        在standalone的应用中, 数据库连接池可以使用一些开源的连接池实现, 如C3P0, proxool DBCP,运行在容器中的应用可以使用服务器提供的DataSource.线程池可以使用JDK本身就提供的java.util.concurrent.ExecutorService.

     1 import java.util.concurrent.Executors;  
     2 
     3 import java.util.concurrent.ExecutorService;  
     4 
     5 public class JavaThreadPool {  
     6 
     7      public static void main(String[] args) {  
     8 
     9      ExecutorService pool = Executors.newFixedThreadPool(2);  
    10 
    11       
    12 
    13      Thread t1 = new MyThread();  
    14 
    15      Thread t2 = new MyThread();  
    16 
    17      Thread t3 = new MyThread();  
    18 
    19      Thread t4 = new MyThread();  
    20 
    21      Thread t5 = new MyThread();  
    22 
    23   
    24 
    25      pool.execute(t1);  
    26 
    27      pool.execute(t2);  
    28 
    29      pool.execute(t3);  
    30 
    31      pool.execute(t4);  
    32 
    33   
    34 
    35      pool.shutdown();  
    36 
    37      }  
    38 
    39 }  
    1 class MyThread extends Thread {  
    2 
    3      public void run() {  
    4 
    5      System.out.println(Thread.currentThread().getName() + "running....");  
    6 
    7      }  
    8 
    9 }  

     

    2.  减少网络开销(在和数据库或者远程服务交互的时候, 尽量将多次调用合并到一次调用中)

    3.  将经常访问的外部资源cache到内存中

          简单的可以使用statichashmap在应用启动的时候加载, 也可以使用一些开源的cache框架, 如OSCacheEhcache. 和资源的同步可以考虑定期轮询和外部资源更新时候主动通知; 或者在自己写的代码中留出接口(命令方式或者界面方式)共手动同步.

    4.   优化IO操作

               JAVA操作文件的时候分InputStream and OutputStream, Reader and Writer两类, stream的方式要快, 后者主要是为了操作字符而用的, 在字符仅仅是ASCII的时候可以用stream的方式提高效率.

               JDK1.4之后的nioio的效率更好.

               OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("d:/test.txt")));              

               out.write("abcd".getBytes());        

           out.flush();  

           out.close();  

          利用BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter减少对磁盘的直接访问次数.

         FileReader fr = new FileReader(f);  

           BufferedReader br = new BufferedReader(fr);  

           while (br.readLine() != null) count++;  

    5.   不要频繁的new对象, 对于在整个应用中只需要存在一个实例的类使用单例模式.

    6.   对于String的连接操作, 使用StringBuffer或者StringBuilder.

    7.   对于utility类型的类通过静态方法来访问.

           避免使用错误的方式, Exception可以控制方法推出, 但是Exception要保留stacktrace消耗性能, 除非必要, 不要使用instanceof做条件判断, 尽量使用比的条件判断方式.

    8. 使用JAVA中效率高的类,比如ArrayListVector性能好.

    9. 对性能的考虑要在系统分析和设计之初就要考虑.

        总之, 一个系统运行时的性能, 无非是从CPU、 MemoryIO这三个主要方面来考虑优化. 减少不必要的CPU消耗, 减少不必要的IO操作, 增加Memory利用效率.

  • 相关阅读:
    RestKit ,一个用于更好支持RESTful风格服务器接口的iOS库
    Pop–实现任意iOS对象的任意属性的动态变化
    界面传值失败
    UIImagePickerController
    NSURLSession
    iOS图标尺寸
    cocoapods
    duplicate symbol _OBJC_IVAR
    MAC升级openssl
    Mac
  • 原文地址:https://www.cnblogs.com/chy2055/p/5123876.html
Copyright © 2020-2023  润新知