




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、如何用如何用JavaJava進行高性能網站開發進行高性能網站開發Java程序性能優化技巧程序性能優化技巧生成對象時,合理分配空間和大小:生成對象時,合理分配空間和大小:Java中的很多類都有它的默認的空間分配大小,對于一些有大小的對象的初始化,應該預計對象的大小,然后使用進行初始化。例如:我們在使用例如:我們在使用Vector,當聲明,當聲明Vector vectnew Vector()時,系統調用:時,系統調用:public Vector() / 缺省構造函數缺省構造函數this(10); / 容量是容量是 10;缺省分配缺省分配10個對象大小容量。當執行個對象大小容量。當執行add方法時,
2、可以看到具體實現為:方法時,可以看到具體實現為:.public synchronized boolean add(Object o) modCount+;ensureCapacityHelper(elementCount+1);elementDataelementCount+ =o;return true;Java程序性能優化技巧程序性能優化技巧生成對象時,合理分配空間和大小:生成對象時,合理分配空間和大小:private void ensureCapacityHelper(int minCapacity) int oldCapacity = elementData.length;if (mi
3、nCapacity oldCapacity) Object oldData = elementData;int newCapacity = (capacityIncrement 0) ? (oldCapacity + capacityIncrement) :(oldCapacity * 2);if (newCapacity minCapacity) newCapacity = minCapacity;elementData = new ObjectnewCapacity;System.arraycopy(oldData, 0, elementData, 0, elementCount);我們可
4、以看到,當Vector大小超過原來的大小時,一些代碼的目的就是為了做容量的擴充,在預先知道該Vector大小的話,可以指定其大小,避免容量擴充的開銷。 Java程序性能優化技巧程序性能優化技巧優化循環體:優化循環體:循環是比較重復運行的地方,如果循環次數很大,循環體內不好的代碼對效率的影響就會被放大而變的突出。讓我們看看下面的代碼片:.Vector vect = new Vector(1000);.for( inti=0; ivect.size(); i+).for循環部分改寫成:循環部分改寫成:int size = vect.size();for( int i=0; isize; i+).如
5、果size=1000,就可以減少1000次size()的系統調用開銷,避免了循環體重復調用。Java程序性能優化技巧程序性能優化技巧優化循環體:優化循環體:再看如下的代碼片:再看如下的代碼片:.for (int i = 0;i 100000;i+)if (i%10 = 9) . / 每十次執行一次每十次執行一次改寫成也可以提高效率:改寫成也可以提高效率:.for(inti =0,j =10; i100000; i+,j-)if(j = 0). / 每十次執行一次每十次執行一次j = 10;所以,當有較大的循環時,應該檢查循環內是否有效率不高的地方,尋找更優的方案加以改進。 Java程序性能優化
6、技巧程序性能優化技巧少用少用newnew初始化一個實例:初始化一個實例:盡量少用new來初始化一個類的實例,當一個對象是用new進行初始化時,其構造函數鏈的所有構造函數都被調用到,所以new操作符是很消耗系統資源的,new一個對象耗時往往是局部變量賦值耗時的上千倍。同時,當生成對象后,系統還要花時間進行垃圾回收和處理。當new創建對象不可避免時,注意避免多次的使用new初始化一個對象。盡量在使用時再創建該對象。如:NewObject object = new NewObject();int value;if(i0 )value =object.getValue();Java程序性能優化技巧程序
7、性能優化技巧少用少用newnew初始化一個實例:初始化一個實例:上面一段代碼可以修改為:上面一段代碼可以修改為:int value;if(i0 )NewObject object = new NewObject();Value =object.getValue();另外,應該盡量重復使用一個對象,而不是聲明新的同類對象。一個重用對象的方法是改變對象的值,如可以通過setValue之類的方法改變對象的變量達到重用的目的。 Java程序性能優化技巧程序性能優化技巧選擇合適的方法調用:選擇合適的方法調用:在Java中,一切都是對象,如果有方法(Method)調用,處理器先要檢查該方法是屬于哪個對象,
8、該對象是否有效,對象屬于什么類型,然后選擇合適的方法并調用。可以減少方法的調用,同樣一個方法:public void CallMethod(int i )if( i =0 )return;. / 其他處理其他處理如果直接調用,如果直接調用,int i = 0;.CallMethod(i);Java程序性能優化技巧程序性能優化技巧選擇合適的方法調用:選擇合適的方法調用:上面的代碼,就應該寫成:int i = 0;.if( i =0 )CallMethod(i);不影響可讀性等情況下,可以把幾個小的方法合成一個大的方法。另外,在方法前加上final,private關鍵字有利于編譯器的優化。 Jav
9、a程序性能優化技巧程序性能優化技巧異常處理技巧:異常處理技巧:異常是Java的一種錯誤處理機制,對程序來說是非常有用的,但是異常對性能不利。拋出異常首先要創建一個新的對象,并進行相關的處理,造成系統的開銷,所以異常應該用在錯誤處理的情況,不應該用來控制程序流程,流程盡量用while,if等處理。在不是很影響代碼健壯性的前提下,可以把幾個try/catch塊合成一個。盡量使用局部變量和靜態變量:盡量使用局部變量和靜態變量:盡量使用局部變量,調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧(Stack) 中,速度較快。其他變量,如靜態變量、實例變量等,都在堆(Heap)中創建,速度較慢。盡
10、量使用靜態變量,即加修飾符static,如果類中的變量不會隨他的實例而變化,就可以定義為靜態變量,從而使他所有的實例都共享這個變量。 同步處理技巧:同步處理技巧:同步主要出現在多線程的情況,為多線程同時運行時提供對象數據安全的機制,多線程是比較復雜話題,應用多線程也是為了獲得性能的提升,應該盡可能減少同步。另外,如果需要同步的地方,可以減少同步的代碼段,如只同步某個方法或函數,而不是整個代碼。Java程序性能優化技巧程序性能優化技巧盡可能的使用盡可能的使用JavaJava自身提供的自身提供的APIAPI:Java的API一般都做了性能的考慮,如果完成相同的功能,優先使用API而不是自己寫的代碼
11、,如數組復制通常的代碼如下:int size = 1000;String strArray1 = new Stringsize;String strArray2 = new Stringsize;for(inti=0;isize;i+) / 賦值賦值strArray1 = (new String(Array: + i);for(inti=0;isize;i+) / 復制復制strArray2=(new String(String)a);Java程序性能優化技巧程序性能優化技巧盡可能的使用盡可能的使用JavaJava自身提供的自身提供的APIAPI:上面那段代碼,如果使用Java提供的API,就
12、可以提高性能:int size = 1000;String strArray1 = new Stringsize;String strArray2 = new Stringsize;for(inti=0;isize;i+) / 賦值strArray1 = (new String(Array: + i);System.arraycopy(strArray1,0,strArray2,0,size); / 復制同樣的一個規則是,當有大量數據的復制時,應該使用System.arraycopy()。 Java程序性能優化技巧程序性能優化技巧盡量減少盡量減少I/OI/O操作:操作: 輸入/輸出(I/O)包
13、括很多方面,我們知道,進行I/O操作是很消耗系統資源的。程序中應該盡量少用I/O操作。使用時可以注意: . 合理控制輸出函數System.out.println()對于大多時候是有用的,特別是系統調試的時候,但也會產生大量的信息出現在控制臺和日志上,同時輸出時,有序列化和同步的過程,造成了開銷。特別是在發行版中,要合理的控制輸出,可以在項目開發時,設計好一個Debug的工具類,在該類中可以實現輸出開關,輸出的級別,根據不同的情況進行不同的輸出的控制。盡量使用緩存:盡量使用緩存:讀寫內存要比讀寫硬盤上的文件要快很多,應盡可能使用緩沖,以便直接從內存中讀取數據。盡可能使用帶有Buffer的類代替沒
14、有Buffer的類,如可以用BufferedReader 代替Reader,用BufferedWriter代替Writer來進行處理I/O操作。同樣可以用BufferedInputStream代替InputStream都可以獲得性能的提高 Java程序性能優化技巧程序性能優化技巧盡量不使用同步:盡量不使用同步:Servlet是多線程的,以處理不同的請求,基于前面同步的分析,如果有太多的同步就失去了多線程的優勢了。不用保存太多的信息在不用保存太多的信息在HttpSession中中很多時候,存儲一些對象在HttpSession中是有必要的,可以加快系統的開發,如網上商店系統會把購物車信息保存在該用
15、戶的Session中,但當存儲大量的信息或是大的對象在會話中時,是有害的,特別是當系統中用戶的訪問量很大,對內存的需求就會很高。具體開發時,在這兩者之間應作好權衡。Java程序性能優化技巧程序性能優化技巧清除清除SESSIONSESSION:通常情況,當達到設定的超時時間時,同時有些Session沒有了活動,服務器會釋放這些沒有活動的Session,. 不過這種情況下,特別是多用戶并訪時,系統內存要維護多個的無效Session。當用戶退出時,應該手動釋放,回收資源,實現如下:.HttpSession theSession = request.getSession();/ 獲取當前Session
16、if(theSession != null)theSession.invalidate(); / 使該Session失效。緩存緩存HomeHome接口:接口:EJB庫使用Enterprise Bean 的客戶端通過它的Home接口創建它的實例。客戶端能通過JNDI訪問它。服務器通過Lookup方法來獲取。JNDI是個遠程對象,通過RMI方式調用,對它的訪問往往是比較費時的。所以,在設計時可以設計一個類專門用來緩存Home接口,在系統初始化時就獲得需要的Home接口并緩存,以后的引用只要引用緩存即可。Java程序性能優化技巧程序性能優化技巧使用快速度的使用快速度的JdbcJdbc驅動:驅動:JD
17、BC API包括兩種實現接口形式,一種是純Java實現的驅動,一種利用ODBC驅動和數據庫客戶端實現,具體有四種驅動模式: 第一類:JDBC-ODBC橋,再加上ODBC驅動程序。第一類JDBC驅動程序是JDBC-ODBC橋再加上一個ODBC驅動程序。建議第一類驅動程序只用于原型開發,而不要用于正式的運行環境。橋接驅動程序由Sun提供,它的目標是支持傳統的數據庫系統。Sun為該軟件提供關鍵問題的補丁,但不為該軟件的最終用戶提供支持。一般地,橋接驅動程序用于已經在ODBC技術上投資的情形,例如已經投資了Windows應用服務器。盡管Sun提供了JDBC-ODBC橋接驅動程序,但由于ODBC會在客戶
18、端裝載二進制代碼和數據庫客戶端代碼,這種技術不適用于高事務性的環境。另外,第一類JDBC驅動程序不支持完整的Java命令集,而是局限于ODBC驅動程序的功能,這種驅動方式也叫胖客戶,主要用于低并發請求,大數據量傳輸的應用。Java程序性能優化技巧程序性能優化技巧使用快速度的使用快速度的JdbcJdbc驅動:驅動:第二類:本機API,部分是Java的驅動程序。第二類JDBC驅動程序是本機API的部分Java代碼的驅動程序,用于把JDBC調用轉換成主流數據庫API的本機調用。這類驅動程序也存在與第一類驅動程序一樣的性能問題,即客戶端載入二進制代碼的問題,而且它們被綁定了特定的平臺。第二類驅動程序要
19、求編寫面向特定平臺的代碼,主流的數據庫廠商,例如Oracle和IBM,都為它們的企業數據庫平臺提供了第二類驅動程序,使用這些驅動程序的開發者必須及時跟進不同數據庫廠商針對不同操作系統發行的各個驅動程序版本。另外,由于第二類驅動程序沒有使用純Java的API,把Java應用連接到數據源時,往往必須執行一些額外的配置工作。很多時候,第二類驅動程序不能在體系結構上與大型主機的數據源兼容;即使做到了兼容,效果也是比較差。Java程序性能優化技巧程序性能優化技巧使用快速度的使用快速度的JdbcJdbc驅動:驅動:第一類和第二類驅動的比較Java程序性能優化技巧程序性能優化技巧使用快速度的使用快速度的Jd
20、bcJdbc驅動:驅動:第三類:面向數據庫中間件的純Java驅動程序。第三類JDBC驅動程序是面向數據庫中間件的純Java驅動程序,JDBC調用被轉換成一種中間件廠商的協議,中間件再把這些調用轉換到數據庫API。第三類JDBC驅動程序的優點是它以服務器為基礎,也就是不再需要客戶端的本機代碼,這使第三類驅動程序要比第一、二兩類快。另外,開發者還可以利用單一的驅動程序連接到多種數據庫。Java程序性能優化技巧程序性能優化技巧使用快速度的使用快速度的JdbcJdbc驅動:驅動:第四類:直接面向數據庫的純Java驅動程序。 第四類JDBC驅動程序是直接面向數據庫的純Java驅動程序,即所謂的“瘦”(t
21、hin)驅動程序,它把JDBC調用轉換成某種直接可被DBMS使用的網絡協議,這樣,客戶機和應用服務器可以直接調用DBMS服務器。對于第四類驅動程序,不同DBMS的驅動程序不同。因此,在一個異構計算環境中,驅動程序的數量可能會比較多。但是,由于第四類驅動程序具有較高的性能,能夠直接訪問DBMS,所以這一問題就不那么突出了, 這種驅動方式,主要用于高并發,低數據量請求的應用中。Java程序性能優化技巧程序性能優化技巧使用快速度的使用快速度的JdbcJdbc驅動:驅動:第三類和第四類驅動的比較Java程序性能優化技巧程序性能優化技巧使用Jdbc鏈接池為了提高訪問數據庫的性能,我們還可以使用JDBC
22、2.0的一些規范和特性,JDBC是占用資源的,在使用數據庫連接時可以使用連接池Connection Pooling,避免頻繁打開、關閉Connection。而我們知道,獲取Connection是比較消耗系統資源的。Connection緩沖池:當一個應用程序關閉一個數據庫連接時,這個連接并不真正釋放而是被循環利用,建立連接是消耗較大的操作,循環利用連接可以顯著的提高性能,因為可以減少新連接的建立。一個通過DataSource獲取緩沖池獲得連接,并連接到一個CustomerDB數據源的代碼演示如下:Context ctx = new InitialContext();DataSource data
23、Source = (DataSource) ctx.lookup(jdbc/CustomerDB);Connection conn = dataSource.getConnection(password,username);Java程序性能優化技巧程序性能優化技巧緩存緩存DataSorceDataSorce一個DataSource對象代表一個實際的數據源。這個數據源可以是從關系數據庫到表格形式的文件,完全依賴于它是怎樣實現的,一個數據源對象注冊到JNDI名字服務后,應用程序就可以從JNDI服務器上取得該對象,并使用之和數據源建立連接。通過上面的例子,我們知道DataSource是從連接池獲得連
24、接的一種方式,通過JNDI方式獲得,是占用資源的。為了避免再次的JNDI調用,可以系統中緩存要使用的DataSource。即時關閉使用過的資源即時關閉使用過的資源互聯網應用系統一般是并發的系統,在每次申請和使用完資源后,應該釋放供別人使用,使用完成后應該保證徹底的釋放。如何利用如何利用Java開發高性能、高并發開發高性能、高并發Web應用應用架構選型架構選型在網站Web應用開發中,系統的整體架構是決定網站性能、穩定性、并發、可擴展性的關鍵因素。下面以世界著名網站應用軟件提供商CoreMediaCMS系統為例,進行架構分析如何利用如何利用Java開發高性能、高并發開發高性能、高并發Web應用應用
25、架構選型架構選型CoreMediaCMS將整個應用分成四成架構,每一層都可以獨立于其他層而正常運行,每一層都可以分布式布署,極大的提高了應用系統的穩定性、可擴展性、支持高并發的要求,每一次之前通過中間件Corba進行穩定的傳輸數據。如何利用如何利用Java開發高性能、高并發開發高性能、高并發Web應用應用開發框架的選型開發框架的選型充分利用開源框架,可以大大提高開發效率。很多初級開發者,都采用DB+JavaBean+JSP這種初級的開發模式,而現在主要使用Struts、Spring等MVC開發框架。常用開發框架構選型有:Struts、Spring、Webwork等。天極傳媒選擇的開發框架是:Struts+Spring+iBatis,在這個開發框架里,充分利用了Struts、Spring各自己的優點,可以選擇StutsMVC,也可以選擇Spring MVC。如何利用如何利用Java開發高性能、高并發開發高性能、高并發Web應用應用分級存儲分級存儲)數據庫數據分級存儲:將經常訪問的數據和訪問頻度低的數據,分別存放到不同的分區,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 樓房買賣合同
- 商鋪裝造合同協議書
- 小型機動車輛抵押合同
- 醫療設備維修合同
- 區塊鏈供應鏈金融風險管理合作框架合同
- 商品房出租合同書
- 公司外聘兼職保密協議合同
- 工程招投標與合同管理心得
- 月餅購銷合同
- 國際汽車貿易城商鋪租賃合同
- 2025年鄭州衛生健康職業學院單招職業傾向性測試題庫含答案
- 腫瘤預防宣傳
- 體育體感游戲創業計劃
- 部編人教版道德與法治6年級下冊全冊課時練習講解課件
- 2025年湖北三江航天江河化工科技限公司招聘高頻重點模擬試卷提升(共500題附帶答案詳解)
- Unit6 Earth First 詞匯課教學設計 2024-2025學年高中英語外研版必修第二冊
- 快遞貨柜出租合同
- 2025年中考語文復習知識清單:語法知識與修辭手法(2類常考知識3個易錯點)(原卷版+解析)
- 中國心腦血管治療儀行業市場調查研究及投資戰略咨詢報告
- 2024版房屋市政工程生產安全重大事故隱患考試試卷(含答案)
- 數字化時代企業成本管控
評論
0/150
提交評論