高清国产av一区二区三区_亚洲欧美日韩在线_无码熟妇人妻av在线影片免费_在线无码一级伊伊_爽好舒服高H自慰软件_亚洲熟女区偷拍区高清区_午夜福利影院啪啪_亚洲国产黄片在线播放_中文字幕日韩精品乐乐影院_久久国产亚洲日韩欧美精品

掃描二維碼關(guān)注

首頁 APP開發(fā)小程序開發(fā) 微信公眾號 網(wǎng)站建設(shè) 營銷推廣 經(jīng)典案列 產(chǎn)品服務(wù) 關(guān)于我們

“學(xué)習(xí)不僅是掌握知識”

向書本學(xué)習(xí),還要向?qū)嵺`學(xué)習(xí)、向生活學(xué)習(xí)。消化已有知識,
而且要力求有所發(fā)現(xiàn)、有所發(fā)明、有所創(chuàng)造

Java性能優(yōu)化技巧集錦(二)

2019/3/2 18:18:55

Java性能優(yōu)化技巧集錦(二)

二、J2EE篇

  前面介紹的改善性能技巧適合于大多數(shù)Java應(yīng)用,接下來要討論的問題適合于使用JSP、EJB或JDBC的應(yīng)用。

  2.1 使用緩沖標記

  一些應(yīng)用服務(wù)器加入了面向JSP的緩沖標記功能。例如,BEA的WebLogic Server從6.0版本開始支持這個功能,Open Symphony工程也同樣支持這個功能。JSP緩沖標記既能夠緩沖頁面片斷,也能夠緩沖整個頁面。當JSP頁面執(zhí)行時,如果目標片斷已經(jīng)在緩沖之中,則生成該片斷的代碼就不用再執(zhí)行。頁面級緩沖捕獲對指定URL的請求,并緩沖整個結(jié)果頁面。對于購物籃、目錄以及門戶網(wǎng)站的主頁來說,這個功能極其有用。對于這類應(yīng)用,頁面級緩沖能夠保存頁面執(zhí)行的結(jié)果,供后繼請求使用。

  對于代碼邏輯復(fù)雜的頁面,利用緩沖標記提高性能的效果比較明顯;反之,效果可能略遜一籌。
 

  2.2 始終通過會話Bean訪問實體Bean

  直接訪問實體Bean不利于性能。當客戶程序遠程訪問實體Bean時,每一個get方法都是一個遠程調(diào)用。訪問實體Bean的會話Bean是本地的,能夠把所有數(shù)據(jù)組織成一個結(jié)構(gòu),然后返回它的值。

  用會話Bean封裝對實體Bean的訪問能夠改進事務(wù)管理,因為會話Bean只有在到達事務(wù)邊界時才會提交。每一個對get方法的直接調(diào)用產(chǎn)生一個事務(wù),容器將在每一個實體Bean的事務(wù)之后執(zhí)行一個“裝入-讀取”操作。

  一些時候,使用實體Bean會導(dǎo)致程序性能不佳。如果實體Bean的唯一用途就是提取和更新數(shù)據(jù),改成在會話Bean之內(nèi)利用JDBC訪問數(shù)據(jù)庫可以得到更好的性能。

  2.3 選擇合適的引用機制

  在典型的JSP應(yīng)用系統(tǒng)中,頁頭、頁腳部分往往被抽取出來,然后根據(jù)需要引入頁頭、頁腳。當前,在JSP頁面中引入外部資源的方法主要有兩種:include指令,以及include動作。

  include指令:例如<%@ include file="copyright.html" %>。該指令在編譯時引入指定的資源。在編譯之前,帶有include指令的頁面和指定的資源被合并成一個文件。被引用的外部資源在編譯時就確定,比運行時才確定資源更高效。
include動作:例如<jsp:include page="copyright.jsp" />。該動作引入指定頁面執(zhí)行后生成的結(jié)果。由于它在運行時完成,因此對輸出結(jié)果的控制更加靈活。但時,只有當被引用的內(nèi)容頻繁地改變時,或者在對主頁面的請求沒有出現(xiàn)之前,被引用的頁面無法確定時,使用include動作才合算。

2.4 在部署描述器中設(shè)置只讀屬性
  實體Bean的部署描述器允許把所有g(shù)et方法設(shè)置成“只讀”。當某個事務(wù)單元的工作只包含執(zhí)行讀取操作的方法時,設(shè)置只讀屬性有利于提高性能,因為容器不必再執(zhí)行存儲操作。

  2.5 緩沖對EJB Home的訪問

  EJB Home接口通過JNDI名稱查找獲得。這個操作需要相當可觀的開銷。JNDI查找最好放入Servlet的init()方法里面。如果應(yīng)用中多處頻繁地出現(xiàn)EJB訪問,最好創(chuàng)建一個EJBHomeCache類。EJBHomeCache類一般應(yīng)該作為singleton實現(xiàn)。

  2.6 為EJB實現(xiàn)本地接口

  本地接口是EJB 2.0規(guī)范新增的內(nèi)容,它使得Bean能夠避免遠程調(diào)用的開銷。請考慮下面的代碼。

PayBeanHome home = (PayBeanHome)
javax.rmi.PortableRemoteObject.narrow
(ctx.lookup ("PayBeanHome"), PayBeanHome.class);
PayBean bean = (PayBean)
javax.rmi.PortableRemoteObject.narrow
(home.create(), PayBean.class);

  第一個語句表示我們要尋找Bean的Home接口。這個查找通過JNDI進行,它是一個RMI調(diào)用。然后,我們定位遠程對象,返回代理引用,這也是一個 RMI調(diào)用。第二個語句示范了如何創(chuàng)建一個實例,涉及了創(chuàng)建IIOP請求并在網(wǎng)絡(luò)上傳輸請求的stub程序,它也是一個RMI調(diào)用。

  要實現(xiàn)本地接口,我們必須作如下修改:

  方法不能再拋出java.rmi.RemoteException異常,包括從RemoteException派生的異常,比如 TransactionRequiredException、TransactionRolledBackException和 NoSuchObjectException。EJB提供了等價的本地異常,如TransactionRequiredLocalException、 TransactionRolledBackLocalException和NoSuchObjectLocalException。

  所有數(shù)據(jù)和返回值都通過引用的方式傳遞,而不是傳遞值。
  本地接口必須在EJB部署的機器上使用。簡而言之,客戶程序和提供服務(wù)的組件必須在同一個JVM上運行。
  如果Bean實現(xiàn)了本地接口,則其引用不可串行化。
  請參見《用本地引用提高EJB訪問效率》。

2.7 生成主鍵
  在EJB之內(nèi)生成主鍵有許多途徑,下面分析了幾種常見的辦法以及它們的特點。

  利用數(shù)據(jù)庫內(nèi)建的標識機制(SQL Server的IDENTITY或Oracle的SEQUENCE)。這種方法的缺點是EJB可移植性


深圳市南山區(qū)南山街道南海大道西桂廟路北陽光華藝大廈1棟4F、4G-04

咨詢電話:136 8237 6272
大客戶咨詢:139 0290 5075
業(yè)務(wù)QQ:195006118
技術(shù)QQ:179981967

精銳軟件

Copyright? 2018-2023 深圳精銳軟件技術(shù)有限公司 All Rights Reserved. ICP備案號:粵ICP備18108116號-8 公安備案號:粵公網(wǎng)安備44030502009460號