西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開(kāi)發(fā)java → 構(gòu)建高性能J2EE常用10種方法

構(gòu)建高性能J2EE常用10種方法

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2010/11/15 14:22:45字體大。A-A+

作者:佚名點(diǎn)擊:38次評(píng)論:0次標(biāo)簽: java

  • 類型:行業(yè)軟件大小:7.3M語(yǔ)言:中文 評(píng)分:10.0
  • 標(biāo)簽:
立即下載
構(gòu)建高性能的J2EE應(yīng)用不但需要了解常用的實(shí)施技巧。下面介紹最常用的10種有效方法,可幫助架構(gòu)設(shè)計(jì)師們快速成為這方面的專家。

Java性能的基礎(chǔ)—內(nèi)存管理

任何Java應(yīng)用,單機(jī)的或J2EE的性能基礎(chǔ)都可歸結(jié)到你的應(yīng)用是如何管理內(nèi)存的問(wèn)題。Java的內(nèi)存管理包括兩個(gè)重要任務(wù):內(nèi)存的分配和內(nèi)存的 回收。在內(nèi)存的分配中,目標(biāo)是要減少需要?jiǎng)?chuàng)建的對(duì)象。

內(nèi)存回收是導(dǎo)致性能下降的普遍原因。也就是說(shuō),內(nèi)存中的對(duì)象越多,垃圾回收越困難。所以我們對(duì)創(chuàng)建對(duì)象的態(tài)度應(yīng)該越保守越好。

在J2EE應(yīng)用中常見(jiàn)的兩個(gè)內(nèi)存有關(guān)的問(wèn)題是:游離的對(duì)象(也被稱為內(nèi)存泄露)和對(duì)象循環(huán)(指大量頻繁創(chuàng)建和刪除-在Java中體現(xiàn)為解除引用—對(duì) 象)。

我們應(yīng)注意確保所有可到達(dá)的對(duì)象實(shí)際是活的,即這些對(duì)象不但在內(nèi)存中,而且也要在執(zhí)行的代碼中是存在的。當(dāng)對(duì)象在應(yīng)用中已經(jīng)沒(méi)有用了,而我們卻忘記 了刪除對(duì)該對(duì)象的引用時(shí),游離的對(duì)象就出現(xiàn)了。

我們知道垃圾回收會(huì)占用CPU時(shí)間。短期對(duì)象的大量創(chuàng)建增加了垃圾回收的頻率會(huì)造成性能下降。

不要在Servlet中實(shí)現(xiàn)業(yè)務(wù)邏輯

在構(gòu)建J2EE應(yīng)用時(shí),架構(gòu)工程師通常會(huì)使用到J2EE的基本部分——Servlet。如果架構(gòu)師不使用Session Beans, Entity Beans, 或 Message Beans, 那么改進(jìn)性能的方法就很少。只能采用增加CPU或更多的物理服務(wù)器等方法。EJB使用了緩存(cache)和資源池等方法可以提高性能和擴(kuò)展性。

盡可能使用本地接口訪問(wèn)EJB

在早期的J2EE (遵循EJB1.X規(guī)范)應(yīng)用中,訪問(wèn)EJB是`通過(guò)RMI使用遠(yuǎn)程接口實(shí)現(xiàn)的。隨著EJB2.0的出現(xiàn),可以通過(guò)本地接口訪問(wèn)EJB,不再使用RMI, 在同一個(gè)JVM中使用遠(yuǎn)程方法已經(jīng)少多了。但是現(xiàn)在還是有一些使用EJB1.X實(shí)現(xiàn)的應(yīng)用和不知道使用本地接口的一些EJB新手。為說(shuō)明這點(diǎn),我們作個(gè)比 較:

1、客戶端應(yīng)用調(diào)用本地Stub

2、該Stub裝配參數(shù)

3、該Stub傳到skeleton

4、該skeleton分解參數(shù)

5、該skeleton調(diào)用EJB對(duì)象

6、EJB對(duì)象執(zhí)行容器服務(wù)

7、EJB對(duì)象調(diào)用企業(yè)BEAN實(shí)例

8、企業(yè)BEA執(zhí)行操作

9、執(zhí)行組裝/分解步驟然后返回

與遠(yuǎn)程接口處理相比較,本地接口的EJB方法是:

1、客戶端調(diào)用本地對(duì)象

2、本地對(duì)象執(zhí)行容器服務(wù)

3、本地對(duì)象調(diào)用企業(yè)Bean實(shí)例

4、企業(yè)Bean實(shí)例執(zhí)行操作

5、沒(méi)有其他返回步驟!

如果你不需要從遠(yuǎn)程的客戶端訪問(wèn)一個(gè)特殊EJB,就應(yīng)該使用本地方法。

在實(shí)現(xiàn)Session Bean的服務(wù)中封裝對(duì)實(shí)體EJB的訪問(wèn)

從Servlet訪問(wèn)實(shí)體EJB不但效率低而且難于維護(hù)。使用Session Facade(會(huì)話外觀)模式可把對(duì)實(shí)體EJB的訪問(wèn)封裝在會(huì)話EJB中,在該會(huì)話EJB中通過(guò)使用本地接口訪問(wèn)實(shí)體EJB而避免過(guò)多的遠(yuǎn)程調(diào)用。

這項(xiàng)技術(shù)會(huì)有額外的性能和擴(kuò)展方面的好處,這是因?yàn)闀?huì)話和實(shí)體EJB可以使用緩存和資源池技術(shù)來(lái)進(jìn)行改進(jìn)。另外,由于負(fù)載的需要,會(huì)話和實(shí)體EJB 可被擴(kuò)展部署到其他硬件設(shè)備上,這比將Servlet層復(fù)制擴(kuò)展到其他硬件設(shè)備上要簡(jiǎn)單的多。

盡量粗粒度訪問(wèn)遠(yuǎn)程EJB

當(dāng)訪問(wèn)遠(yuǎn)程EJB時(shí),調(diào)用set/get方法將產(chǎn)生過(guò)多的網(wǎng)絡(luò)請(qǐng)求,同時(shí)也導(dǎo)致遠(yuǎn)程接口處理的過(guò)載。為避免這種情況,可考慮將數(shù)據(jù)屬性集中在一個(gè)對(duì) 象中,這樣通過(guò)一次對(duì)遠(yuǎn)程EJB的調(diào)用就可以傳遞所有數(shù)據(jù)。這項(xiàng)技術(shù)就是數(shù)據(jù)傳輸對(duì)象(Data Transfer Object)模式。

優(yōu)化SQL

J2EE 的架構(gòu)設(shè)計(jì)工程師和開(kāi)發(fā)人員通常不是SQL專家或經(jīng)驗(yàn)豐富的數(shù)據(jù)庫(kù)管理員。首先應(yīng)該確保SQL使用了數(shù)據(jù)庫(kù)提供的索引支持。在某些情況下,將數(shù)據(jù)庫(kù)的索引 和數(shù)據(jù)分開(kāi)存放會(huì)提高性能。但要知道,增加額外的索引可以提高SELECT性能但也會(huì)降低INSERT的性能。對(duì)于某些數(shù)據(jù)庫(kù),關(guān)聯(lián)表之間的排序會(huì)嚴(yán)重影 響性能?梢远嘞驍(shù)據(jù)庫(kù)管理員咨詢。

避免在實(shí)體EJB中過(guò)多執(zhí)行SQL

有時(shí)候,通過(guò)實(shí)體EJB訪問(wèn)數(shù)據(jù)會(huì)執(zhí)行多個(gè)SQL語(yǔ)句。根據(jù)J2EE 規(guī)范,第一步,將調(diào)用實(shí)體Bean的find(發(fā)現(xiàn))方法;第二步,在第一次調(diào)用實(shí)體EJB的業(yè)務(wù)方法時(shí),容器會(huì)調(diào)用ejbLoad()從數(shù)據(jù)庫(kù)中獲得信 息。

很多CMP(容器管理持久性)在調(diào)用發(fā)現(xiàn)方法時(shí)就緩存了實(shí)體數(shù)據(jù),所以在調(diào)用ejbLoad()時(shí)就不再訪問(wèn)數(shù)據(jù)庫(kù)了。應(yīng)該避免使用 BMP(Bean管理的持久性)或者自己實(shí)現(xiàn)緩存算法避免二次訪問(wèn)數(shù)據(jù)庫(kù)。

使用Fast Lane Reader 模式訪問(wèn)只讀數(shù)據(jù)

J2EE 應(yīng)用經(jīng)常要以只讀方式訪問(wèn)大量長(zhǎng)時(shí)間不變的數(shù)據(jù),而不是訪問(wèn)單個(gè)實(shí)體,例如瀏覽在線產(chǎn)品目錄。在這種只讀情況下,使用實(shí)體EJB訪問(wèn)數(shù)據(jù)會(huì)導(dǎo)致嚴(yán)重過(guò)載并 且實(shí)現(xiàn)很麻煩。實(shí)體EJB 適合于對(duì)單個(gè)實(shí)體的粗粒度訪問(wèn),訪問(wèn)大量的列表只讀數(shù)據(jù)時(shí)效率不高。不管是使用CMP還是BMP,一定需要編寫(xiě)代碼操作多個(gè)實(shí)體EJB及其關(guān)聯(lián)。這將導(dǎo)致 訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)并存在大量的也是不必要的事務(wù)開(kāi)銷。

利用Java Messaging Servce(消息服務(wù))

J2EE規(guī)范在JMS中提供了內(nèi)置的異步處理服務(wù)。當(dāng)涉及到系統(tǒng)需求時(shí),應(yīng)該了解在什么情況下應(yīng)該采用JMS進(jìn)行異步處理的設(shè)計(jì)。一旦確定要執(zhí)行一 些異步處理,那么同步處理的任務(wù)就應(yīng)該越少越好,將數(shù)據(jù)庫(kù)密集的操作安排在稍后的異步處理中完成。

緩存JNDI Lookup查找

很多操作在進(jìn)行JNDI查找時(shí)要消耗大量資源。通常應(yīng)該緩存JNDI資源避免網(wǎng)絡(luò)調(diào)用和某些處理的過(guò)載?梢跃彺娴腏NDI查找包括:

EJB Home Interfaces

Data Sources

JMS Connection Factories

MS Destinations/Topics

一些JNDI包實(shí)現(xiàn)了緩存功能。但是調(diào)用對(duì)EJB主接口的narrow方法時(shí),這種功能作用有限。緩存查找的設(shè)計(jì)應(yīng)該使用共享的 IntialContext 實(shí)例,盡管構(gòu)建它很麻煩。這是因?yàn)樾枰L問(wèn)多種數(shù)據(jù)源,包括應(yīng)用資源文件JNDI.properties,系統(tǒng)屬性的各項(xiàng)參數(shù),傳入到構(gòu)造函數(shù)的各項(xiàng)參 數(shù)。

    PPT圖表
    (111)PPT圖表
    我們?cè)谥谱鞲黝惖臅r(shí)候,或多或少的都能用到圖表。圖表它可以直觀的展示出各種信息數(shù)據(jù),有了圖表你就可以很好的將數(shù)據(jù)更直觀準(zhǔn)確的表達(dá)出來(lái)。小編在這里為大家搜集整理了一些大家可能會(huì)用到的圖表模板,歡迎有需要的各位前來(lái)下載。...更多>>

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)