Make your java server faster
來源:互聯網
上載者:User
1. NIO
使用JDK1.4中提供的New IO來處理多串連的情況,用以取代舊有的一用戶端一線程的IO模型。
NIO能提高伺服器效能的關鍵在於NIO給JAVA提供了非阻塞的IO模型。以前需要用一個線程來等待使用者的資料,現在只需要用select“選擇”出ready(就緒)的socket,然後在有資料的時候才去讀。這樣能夠用很少的幾個線程同時向大量的串連使用者提供服務,免去了線程切換帶來的開銷。
2. Thread Pool (SEDA)
把你的伺服器的處理過程分解為Stage,給每個Stage配以一個線程池來並發處理Event。Stage之間通過Event來互相轉換。
SEDA的秘訣在於總的來說,並發是有好處的。通過把伺服器的處理過程分解為Stage,提高了伺服器的模組性。同時給每個Stage配置一個自己的線程池來處理它的事件,能夠精緻調整其池的大小,決定這個Stage的並發性。雖然SEDA的創始者把他寫的SandStorm寫得n複雜,但是SEDA本身的思想很簡單,利用JDK1.5提供給我們的良好線程支援,百來行代碼就能實現一個SEDA的模型出來。
3. StAX
使用StAX來代替DOM或者SAX。流式的XML解析能夠消耗更少的記憶體,而且速度更快。
DOM很耗費記憶體,需要效能的地方肯定不能考慮。SAX很龐大肥碩,比起Pull式的流式Parser來,還是慢。StAX是Pull式流式Parser標準化的產物,04年已經是final了的jsr。現在有一個BEA提供的RI,使用APL協議。伺服器實現的一般是協議式的東西,往往是以流為中心,而不是以文檔為中心,而且往往需要自己控制著parser去解析,使用StAX最適合不過了。
4. Javolution
在大量產生臨時記憶體的地方,而且是反覆被使用的部分,使用Javolution即時架構來“精緻地”管理記憶體。
5. In general
好的記憶體管理與恰當的並發是使得程式效能更好負載能力更強的關鍵。