Java性能優(yōu)化
- 期刊名字:計算機應(yīng)用
- 文件大?。?09kb
- 論文作者:全銳,蘆東昕,謝世波,方馬
- 作者單位:中興通訊股份有限公司
- 更新時間:2020-09-29
- 下載次數(shù):次
第23卷計算機應(yīng)用.Vol.232003年12月Computer ApplicationsDec., 2003文章編號:1001 - 9081(2003)12Z - 0344- 02Java性能優(yōu)化全銳,蘆東昕,謝世波,方 馬(中興通訊股份有限公司成都研究所,四川成都610041)摘要:性能問題一直是Java無法回避的一一個弱點。然而造成性能低下的原因除了Java本身的實現(xiàn)外,很多時候是由于應(yīng)用沒有優(yōu)化地使用Java造成的。從虛擬機、應(yīng)用編程和測試三方面分析如何進行Java優(yōu)化,指導(dǎo)進行高效的Java應(yīng)用設(shè)計。關(guān)鍵詞:Java;性能;優(yōu)化中圖分類號: TP311. 52文獻標識碼:A面向?qū)ο蟮木幊棠J胶驼Z言本身的優(yōu)秀特征使Java成多介入內(nèi)存管理,但是這種簡單性也導(dǎo)致了不可控性,所以唯為眾多應(yīng)用開發(fā)的首選。任何事務(wù)都有兩面性:簡單、跨平-能夠做到的就是通過調(diào)整Java內(nèi)存參數(shù)進行-定的控制。臺、垃圾收集等的確減少了程序員的許多工作;然而一個設(shè)計可以調(diào)整如下的參數(shù):良好的Java程序,其性能表現(xiàn)往往不如-個完成同樣功能的-Xms and -Xmx.控制虛擬機內(nèi)存使用量;C或C++程序。這幾乎成為Java最大的一個弱點。但是在-verbose: gc,觀測GC運行的具體情況;Java程序中,大部分的性能問題并不在Java語言本身,而在-XX: NewSize,控制“幼稚園"(GC中的nursery概念)開于使用這種語言的方式和設(shè)計人員對性能問題的弱化,沒有始大小;掌握優(yōu)化使用Java語言的方法。-Xincgc and -Xnoincgc ,打開或者關(guān)閉增量式回收。注意:某些-X參數(shù)不是標準選項,可能在虛擬機將來的1 Java虛擬機的優(yōu)化版本中改變。對于簡單的小型程序,-般用“Java 主類”的方式來運行-Xms控制了虛擬器初始內(nèi)存大小,-Xmx控制了虛擬機程序。但如果是大型程序,特別是服務(wù)器端程序,對各種資源最大內(nèi)存大小。虛擬機開始的時候分配Xms內(nèi)存給應(yīng)用程消耗都比較大,這時就應(yīng)該注意Java虛擬機的參數(shù)了,其對序使用,-旦內(nèi)存的使用超過了Xms,則自動擴展內(nèi)存,直到程序運行有著至關(guān)重要的影響。Xmx,如果這時還有新的內(nèi)存需要,則要拋OutOfMemeory異1.1 Java虛擬機的選擇常了。Xms的值并不是隨便設(shè)定的,雖然其設(shè)定得很小沒有Java虛擬機主要有Classic.HotSpot虛擬機,其中很大的影響,內(nèi)存如果不足,最終都會擴展上去的,但是這種HotSpot虛擬機又分為Java HotSpot Client VM和Java擴展總會耗用一定的虛擬機資源。所以Xms最佳的設(shè)定是HotSpot Server VM。Classic 虛擬機是老的虛擬機,一般情比程序進入穩(wěn)定狀態(tài)后的內(nèi)存使用值略大一點。HotSpot 虛況下不再使用。擬機的Xms默認為2M,Xmx默認為64M。對于-些大型的HotSpot虛擬機是Sun最新的Java虛擬機,其重點突破程序這遠遠不能滿足。另外Xmx的設(shè)定之和(多個虛擬機了幾個關(guān)鍵性的技術(shù),從而獲得了杰出的性能:1)“運行中適時)一般不能超過物理內(nèi)存的80%,否則得不到很好的性能。配”編譯;2)方法內(nèi)置;3)改進和重新設(shè)計的對象布局;4)快速-verbose:gc詳細觀測GC是如何起作用的,幫助進行各且完全精確的垃圾回收;5)超快速線程同步。這些杰出的技種參數(shù)的設(shè)定。術(shù)突破使Java虛擬機的效率成倍提高。-XX:NewSize用來控制nursery 的開始大小。一般情況Java HotSpot Client VM是默認的HotSpot虛擬機,其下,即使現(xiàn)在的內(nèi)存使用小于Xms,也會有一定的GC,因為.適用于-般的客戶端程序和小型程序。JavaHotSpotServerHotSpot使用分代式GC。其基于一種合理的假設(shè):大多數(shù)的.VM是Sun在企業(yè)服務(wù)器環(huán)境中提供的快速、可靠的Java虛對象都是剛生成不久就死亡了。所以它并不是收集所有的內(nèi).擬機。-般的大型服務(wù)器端應(yīng)用應(yīng)該選擇這個虛擬機。存,而是將內(nèi)存分成-些代,當最年輕的代(即“nursery")滿1.2Java內(nèi)存參數(shù)的調(diào)整了以后,就進行-次部分的GC來回收這些不再使用的對象。在機器配置和Java虛擬機版本-定的情況下,影響Java這種中國煤化工得多,也快得多,其大大降程序性能最大的就應(yīng)該是Java內(nèi)存參數(shù)配置了。低了YHCN MH C提高了虛擬機的吞吐量。GC(垃圾收集)無疑是Java的一大優(yōu)點,程序員無須過在默認的情況下nursery為640K(Intel平臺),這個值如果設(shè).收稿日期:2003-10-16作者簡介:全銳(1976-),男,四川成都人.碩土,主要研究方向:電信網(wǎng)絡(luò)管理、電子政務(wù)J2EE;蘆 東昕(1971-),男,黑龍江哈爾濱人,博士后,主要研究方向:電信網(wǎng)絡(luò)管理、嵌入式系統(tǒng)、信息安全;謝世波(1973-),男 ,四川成都人,碩士,主要研究方向:電信網(wǎng)絡(luò)管理、嵌入式系統(tǒng);方馬(1973-).男,四川成都人,碩士,主要研究方向:電信網(wǎng)絡(luò)管理、嵌入式系統(tǒng)J2EE.12月全銳等:Java性能優(yōu)化345定得太小,則對象在代間移動很頻繁,讓該被回收的對象阻塞同步代碼段。-些集合類本身就是synchronized的,如果在在老的代中,導(dǎo)致完全GC更早發(fā)生;如果這個值設(shè)定得太單線程使用,則沒有意義,請自己實現(xiàn)非synchronized 的版大.則可能導(dǎo)致分代收集較長的停頓,最后達到完全GC的時間。這個值只有通過-verbose:gc打開GC觀察實際的結(jié)果,d)對于I/O,如果可能,盡量用緩沖,當然,如果flush很不斷調(diào)整。不過,在長時間運行的Java程序中,HotSpot虛擬頻繁,則用緩沖沒有意義。機能夠自動調(diào)整nursery大小,所以HotSpot是-種很優(yōu)秀e)其它--些優(yōu)化,如盡可能多地使用static,final,private的虛擬機。等關(guān)鍵字。-Xincgc打開增量式GC。它將完全的對象集分成小的對但是在大多數(shù)實際程序中,它們的優(yōu)勢有限。盡可能地象集,每次只進行部分的GC,縮短了GC的時間,減小了程序使用它們,但是不要把所有優(yōu)化工作都集中于此類習慣用法。的停頓。但是其總的GC消耗反大于完全GC。它適用于對同時,要遵循一個原則:“過早的優(yōu)化是-切麻煩的根源”。最程序響應(yīng)時間要求較高的場合,如圖形界面。注意,增量式.明智的做法是抑制過早優(yōu)化的沖動,因為那樣做可能遺漏多GC不是等內(nèi)存滿了再運行,而是-旦發(fā)現(xiàn)機會就進行。種有用的編程技術(shù),造成代碼更難理解和操控,并需更大的精總的來說,HotSpot虛擬機有一定自適應(yīng)能力,但是調(diào)整力進行維護。HotSpot內(nèi)存管理還是一件相當復(fù)雜的工作,需要進行各種3從測試的角度進行Java優(yōu)化測試和模擬,找到一組最優(yōu)的值。這里說的是性能測試,其主要目的是找出Java程序的性2Java程序的優(yōu)化能瓶頸。通行的測試工具,如ProfileViewer. Jswat、Optimizeit等,可以幫助定位性能瓶頸及優(yōu)化的方向。Java程序的優(yōu)化-般分為如下幾個層次:測試的時候,應(yīng)該通過各種工具提供的指標,對系統(tǒng)各個1)良好的構(gòu)架設(shè)計組成部分的內(nèi)存耗用和CPU時間進行橫向比較,特別是那些構(gòu)架是應(yīng)用的基礎(chǔ),如果構(gòu)架設(shè)計得不合理,則會對后續(xù)關(guān)鍵性的代碼段。通過分析找出性能瓶頸所在,集中用上面的優(yōu)化造成很大的障礙。構(gòu)架應(yīng)該簡單、清晰,同時又考慮到介紹的方法對它們進行優(yōu)化,再進行測試,找出新的瓶頸所-定的可擴展性。--定要注意構(gòu)架的設(shè)計不能過多考慮將來在,最終達到性能需求。這里,一個明確的性能需求是很重要可能會有的功能,這樣只會使構(gòu)架設(shè)計變得越來越復(fù)雜,最終的。導(dǎo)致低效的設(shè)計,即使后面再怎么優(yōu)化也起不到實質(zhì)的作用。在測試的時候要注意如下的-些原則:2)關(guān)鍵流程的算法設(shè)計1)測試代碼不能對系統(tǒng)的性能有太大影響。算法改進這類高級優(yōu)化技術(shù)具有很大潛力。在優(yōu)化性能2)如對自己的程序進行了修改,并試圖(至少在開發(fā)平關(guān)鍵型代碼塊時,先分析此代碼的實現(xiàn)過程,嘗試從不同的角臺上)改善它的性能,那么在修改前后應(yīng)分別測試一下代碼的度處理該問題。這類優(yōu)化的一個明顯困難是難于一般化。每執(zhí)行時間。個算法都特定于特殊應(yīng)用程序領(lǐng)域,因此能夠提供的通用指3)如果要進行縱向比較,則應(yīng)盡量在完全-致的環(huán)境中導(dǎo)原則幾乎沒有。這取決于程序員是否有創(chuàng)造力以及對問題進行每-次測試,如機器的配置、負載、網(wǎng)絡(luò)的狀況和數(shù)據(jù)庫.的把握程度。的情況要盡量一致,才具有可比性。3)性能改進技術(shù)4)如果可能,應(yīng)設(shè)計一個不依賴任何用戶輸入的測試,最基本思路是用數(shù)據(jù)復(fù)雜度換取時間復(fù)雜度。比如對象避免用戶的不同反應(yīng)導(dǎo)致結(jié)果出現(xiàn)誤差。高速緩存技術(shù)。在Java程序中,對象高速緩存特別有用,因性能測試是-項較為復(fù)雜的工作,它要求測試人員要有為它避免了巨大的對象創(chuàng)建和垃圾收集開銷。又如軟引用技-定經(jīng)驗,并選擇合適的測試方法,而且有時還要對源碼進行術(shù),其將對象的緩沖區(qū)完全置于GC的管理之下;還有就是線一定的走讀。核心源碼的作者可以進行相應(yīng)的性能測試,往程池、連接池等技術(shù),其實質(zhì)也是緩存一些重新生成會很耗時往收到事半功倍的效果。這樣,設(shè)計的時候運用各種優(yōu)化思想,實現(xiàn)的時候運用各種優(yōu)化技術(shù),嚴格的測試找出并解決系的資源。這些都能很好提高系統(tǒng)效率。統(tǒng)的性能瓶頸,最后在合理的虛擬機參數(shù)下運行,一定能夠在4)Java語言級別的優(yōu)化Java應(yīng)用中取得性能的較大突破。這是Java語言級別的編程優(yōu)化。比如:參考文獻a)-般的,用StringBuffer代替String;盡可能使用靜態(tài)[1] Eckel B. Java編程思想[M]. 北京:機械工業(yè)出版社,2002.變量;不要對已生成的對象做過多的改變;生成對象時,要分中國煤化工)[M].北京:清華大學出版配給它合理的空間和大小;避免生成不太使用或生命周期短HCNMHG的對象或變量;只在對象作用范圍內(nèi)進行初始化。[3] http://Java. sun. com/b)只用異常機制進行真正的異常處理,而不是進行流程[4] http:// www. jboss. org/控制;盡可能重用已經(jīng)存在的異常,而不是new新的異常。5] http://www. csdn. net.c)線程的synchronized 盡量少用,用同步方法而不要用[6] http:// www. huihoo. com.
-
C4烯烴制丙烯催化劑 2020-09-29
-
煤基聚乙醇酸技術(shù)進展 2020-09-29
-
生物質(zhì)能的應(yīng)用工程 2020-09-29
-
我國甲醇工業(yè)現(xiàn)狀 2020-09-29
-
石油化工設(shè)備腐蝕與防護參考書十本免費下載,絕版珍藏 2020-09-29
-
四噴嘴水煤漿氣化爐工業(yè)應(yīng)用情況簡介 2020-09-29
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-09-29
-
甲醇制芳烴研究進展 2020-09-29
-
精甲醇及MTO級甲醇精餾工藝技術(shù)進展 2020-09-29


