構建高性能的J2EE應用不但需要了解常用的實施技巧。下面介紹最常用的10種有效方法,可幫助架構設計師們快速成為這方面的專家。
java性能的基礎----內存治理
任何Java應用,單機的或J2EE的性能基礎都可歸結到你的應用是如何治理內存的問題。Java的內存治理包括兩個重要任務:內存的分配和內存的回收。在內存的分配中,目標是要減少需要創建的對象。 內存回收是導致性能下降的普遍原因。也就是說,內存中的對象越多,垃圾回收越困難。所以我們對創建對象的態度應該越保守越好。
在J2EE應用中常見的兩個內存有關的問題是:游離的對象(也被稱為內存泄露)和對象循環(指大量頻繁創建和刪除-在Java中體現為解除引用---對象)。
我們應注重確保所有可到達的對象實際是活的,即這些對象不但在內存中,而且也要在執行的代碼中是存在的。當對象在應用中已經沒有用了,而我們卻忘記了刪除對該對象的引用時,游離的對象就出現了。
我們知道垃圾回收會占用CPU時間。短期對象的大量創建增加了垃圾回收的頻率會造成性能下降。
不要在Servlet中實現業務邏輯
在構建J2EE應用時,架構工程師通常會使用到J2EE的基本部分,Servlet。
假如架構師不使用session Beans, Entity Beans, 或 Message Beans, 那么改進性能的方法就很少。只能采用增加CPU或更多的物理服務器等方法。EJB使用了緩存(cache)和資源池等方法可以提高性能和擴展性。
盡可能使用本地接口訪問EJB
在早期的J2EE (遵循EJB1.X規范)應用中,訪問EJB是`通過RMI使用遠程接口實現的。隨著EJB2.0的出現,可以通過本地接口訪問EJB,不再使用RMI,在同一個JVM中使用遠程方法已經少多了。但是現在還是有一些使用EJB1.X實現的應用和不知道使用本地接口的一些EJB新手。為說明這點,我們作個比較:
1, 客戶端應用調用本地Stub
2, 該Stub裝配參數
3, 該Stub傳到skeleton
4, 該skeleton分解參數
5, 該skeleton調用EJB對象
6, EJB對象執行容器服務
7, EJB對象調用企業BEAN實例
8, 企業BEA執行操作
9, 執行組裝/分解步驟然后返回
與遠程接口處理相比較,本地接口的EJB方法是:
1. 客戶端調用本地對象
2. 本地對象執行容器服務
3. 本地對象調用企業Bean實例
4. 企業Bean實例執行操作
5. 沒有其他返回步驟!!
新聞熱點
疑難解答