一、將一些系統資源放在池中,如數據庫連 接,線程等.在standalone的應用中,數據庫鏈接池可使用一些開源的鏈接池實現,如C3P0,proxool和DBCP等,在運行在容器中的應 用這可使用服務器提供的DataSource.線程池可使用JDK自己就提供的 java.util.concurrent.ExecutorService. Java代碼 收藏代碼 import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
public class JavaThreadPool {
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(2);java
Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); Thread t4 = new MyThread(); Thread t5 = new MyThread(); pool.execute(t1); pool.execute(t2); pool.execute(t3); pool.execute(t4); pool.shutdown(); }
}
class MyThread extends Thread {
public void run() {
System.out.println(Thread.currentThread().getName() + "running....");
}
}數據庫
二、減小網絡開銷,在和數據庫或者遠程服務交互的時候,儘可能將屢次調用合併到一次調用中。 三、將常常訪問的外部資源cache到內存中,簡單的可使用static的hashmap在應用啓動的時候加載,也可使用一些開源的cache框 架,如OSCache和Ehcache等.和資源的同步能夠考慮按期輪詢和外部資源更新時候主動通知,或者在本身寫的代碼中留出接口(命令方式或者界面方 式)共手動同步。 四、優化IO操做,JAVA操做文件的時候分InputStream and OutputStream,Reader and Writer兩類,stream的方式要快,後者主要是爲了操做字符而用的,在字符僅僅是ASCII的時候能夠用stream的方式提升效 率.JDK1.4以後的nio比io的效率更好。 Java代碼 收藏代碼 OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("d:/temp/test.txt")));
out.write("abcde".getBytes());
out.flush();
out.close();服務器
利用BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter減小對磁盤的直接訪問次數。
Java代碼 收藏代碼 FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
while (br.readLine() != null) count++;網絡
五、不要頻繁的new對象,對於在整個應用中只須要存在一個實例的類使用單例模式.對於String的鏈接操做,使用StringBuffer或者StringBuilder.對於utility類型的類經過靜態方法來訪問。 六、避免使用錯誤的方式,如Exception能夠控制方法推出,可是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof作條件判斷,儘可能使用比的條件判斷方式.使用JAVA中效率高的類,好比ArrayList比Vector性能好。 七、對性能的考慮要在系統分析和設計之初就要考慮。 總之,一個系統運行時的性能,無非是從CPU,Memory和IO這三個主要方面來考慮優化.減小沒必要要的CPU消耗,減小沒必要要的IO操做,增長Memory利用效率。性能