J2EE系統(tǒng)優(yōu)化之對(duì)象與循環(huán)簡介_第1頁
J2EE系統(tǒng)優(yōu)化之對(duì)象與循環(huán)簡介_第2頁
J2EE系統(tǒng)優(yōu)化之對(duì)象與循環(huán)簡介_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、J2EE系統(tǒng)優(yōu)化之對(duì)象與循環(huán)簡介J2EE系統(tǒng)優(yōu)化之對(duì)象與循環(huán)簡介條例一:盡量重用對(duì)象,防止創(chuàng)立過多短時(shí)對(duì)象對(duì)象在而向?qū)ο缶幊讨须S處可見,甚至可以毫不夸張的說是: “一切 都是對(duì)象。如何更好的創(chuàng)立和使用對(duì)象,是優(yōu)化中要考慮 的一個(gè)重要 方面。筆者將對(duì)象按使用分為兩大類:獨(dú)享對(duì)象和共享 對(duì)象。獨(dú)享對(duì)象 指由某個(gè)線程單獨(dú)擁有并維護(hù)其生命周期的對(duì)象,一般是通過new創(chuàng)立的對(duì)象,線程結(jié)束且無其它對(duì)這個(gè)對(duì)象的引用 , 這個(gè)對(duì)象將由垃圾收集機(jī) 制自動(dòng)GCc共享對(duì)象指由多個(gè)線程共享的 對(duì)象,各線程保持多個(gè)指向同 一個(gè)對(duì)象的引用,任何對(duì)這個(gè)對(duì)象的 修改都會(huì)在其它引用上得到表達(dá), 共享對(duì)象一般通過 Factory

2、 工廠 的 getlnstaceO 方法創(chuàng)立,單例模式就 是創(chuàng)立共享對(duì)象的標(biāo)準(zhǔn)實(shí)現(xiàn)。 獨(dú)享對(duì)象由于無其它指向同一對(duì)象的引用, 不用擔(dān)憂其它引用對(duì)對(duì) 象屬性的修改,在多線程環(huán)境里,也就不需要對(duì) 其可能修改屬性的 方法加以同步,減少了出錯(cuò)的隱患和復(fù)雜性,但由于 需要為每個(gè)線程都創(chuàng)立對(duì)象,增加了對(duì)內(nèi)存的需求和 JWGC勺負(fù)擔(dān)。共享 對(duì)象那么 需要進(jìn)行適當(dāng)?shù)耐椒乐馆^大的同步塊,同時(shí)防止死鎖。還有幾種特殊對(duì)象:不變對(duì)象和方法對(duì)象。不變對(duì)象指對(duì)象對(duì)外 不含 有修改對(duì)象屬性的方法如 set 方法,外部要修改屬性只能通 過 new 新的實(shí)例來實(shí)現(xiàn)。不變對(duì)象最大的好處就是無需擔(dān)憂屬性被 修改,防止 了潛在的b

3、ug,并能無需任何額外工作如同步就很好的工作在多線程環(huán)境下。如 jdk 的 String 對(duì)象就是典型的不變對(duì)象。 方法對(duì)象簡單的說 就是僅包含方法,不含有屬性的對(duì)象。由于沒有 對(duì)象屬性,方法中無需 進(jìn)行修改屬性的操作,也就能采用 static 方 法或單例模式,防止每次使 用都要new對(duì)象,減少對(duì)象的使用。那么該如何確定創(chuàng)立何種對(duì)象, 這就要結(jié)合對(duì)象的使用方式和生 命周 期、對(duì)象大小、構(gòu)建花銷等方而來綜合考慮。如果對(duì)象生命周 期較長, 會(huì)存在修改操作, 不能容忍其它線程對(duì)其的修改, 就應(yīng)該 采用獨(dú)享對(duì)象,如常見的 Bean 類。而如果對(duì)象生命周期較長,且能 為各個(gè)線程共享,就 可以考慮共享對(duì)

4、象。共享有 2 種常見情況,一 種是系統(tǒng)全局對(duì)象,如配 置屬性等,各個(gè)線程應(yīng)該引用同一對(duì)象, 任何對(duì)這個(gè)對(duì)象的修改都會(huì)影 響其它線程 ; 另一種是由于對(duì)象創(chuàng)立開 銷較大,各線程對(duì)此對(duì)象是瞬時(shí)訪 問,且無需再次讀取其屬性,如 常見的 Date 對(duì)象,一般這種對(duì)象的使用 是瞬時(shí)的,比方把它format成String,如果每次創(chuàng)立然后等待GC就會(huì)浪 費(fèi)大量內(nèi)存和CPU時(shí)間,較好做法就是做成共享對(duì)象,各個(gè)線程先set再使用, 注意對(duì)進(jìn)行 set 并訪問的方法要同步。不變對(duì)象一般使用在對(duì) 象創(chuàng) 建開銷較小 (屬性較少, 類層次較少 ) ,且需要能自由共享的情形。 如 一個(gè)對(duì)象里的常量對(duì)象,使用publi

5、cstaticfinalAAA二newAAA)創(chuàng)立。方法對(duì)象使用較廣,如Util類、DAO類等,這些對(duì)象提供操 作其它對(duì)象(一 般是bean對(duì)象)的接口,能對(duì)系統(tǒng)在層次和功能上進(jìn)行解耦合。條例二:在循環(huán)處,多下功夫循環(huán)作為程序編寫的根本語法,可以說是隨處可見。一些小的細(xì) 節(jié)能 帶來性能上的提升,而對(duì)循環(huán)體的一些改寫,能帶來性能的大 幅提升。比方最簡單的 List 遍歷,會(huì)有這樣的寫法: for(inti 二 O;i同樣是對(duì) List 的操作,如果要在遍歷同時(shí)進(jìn)行增加和刪除操作 , 代碼 如下:for (inti=0, j=l. size () ; i=0; i-) 1. remove (i)

6、; o經(jīng)過測(cè)試,如果采用 ArrayList, 兩種寫法在循環(huán)次數(shù)較少時(shí)沒有太 大的區(qū) 別,循環(huán)次數(shù)為1000,均為Ims以內(nèi),次數(shù)為10000,前一種為60ms左右, 后一種為1ms以內(nèi),而次數(shù)上到100000,前一種為6000ms左右,后一 種為15ms,隨著循環(huán)次數(shù)的增多,后一種較前一種的效率優(yōu)勢(shì)明顯提高。這是由 Collection 庫 ArrayList 的實(shí)現(xiàn)決定的,以下是 jdkl. 3 的 ArrayList 源碼:publicObjectremove(intindex) RangeCheck(index ); modCount+;ObjectoldValue=elementD

7、ataindex;intnumMoved 二 size-indexT ;辻 numMoved>0System, arraycopy elementData, index+1, elementData, index,n umMoved ;elementData 一 -size 二 null;/LetgcdoitsworkreturnoldValue;>從中我們可以看出,numMove代表了需要進(jìn)行arraycopy操作的數(shù) 量,它是由remove的位置決定的,如果index=0,也就是刪除 第一個(gè)元素, 那么需要 arraycopy 后而的所有數(shù)據(jù),而如果 index=sizel,

8、那么只需將最后 一個(gè)元素設(shè)為null即可。所以從后面向前循環(huán)remove是比擬好的寫法。如果List中確實(shí)存在較多的add或remove操作,且容量較大 如存 儲(chǔ)幾萬個(gè)對(duì)象,那么應(yīng)該采用 LinkedList 作為實(shí)現(xiàn)。 LinkedList 內(nèi)部采 用雙向鏈表作為數(shù)據(jù)結(jié)構(gòu),比 ArrayList 占用較 多內(nèi)存空間,且隨機(jī)訪 問操作較慢需要從頭或尾循環(huán)到相應(yīng)位置 , 但插入刪除操作很快僅 需進(jìn)行鏈表操作,無須大量移動(dòng)或拷貝。對(duì)于List操作如果循環(huán)規(guī)模較小,其實(shí)對(duì)性能影響非常小ms級(jí), 遠(yuǎn)遠(yuǎn)不是性能瓶頸所在。但心中有著優(yōu)化的意識(shí),并力求寫出 簡潔高效 的程序應(yīng)該是我們每個(gè)程序員的追求。而且一

9、旦在循環(huán)規(guī) 模較大時(shí),如 果有了這些意識(shí),也就能有效的消除性能隱患。再舉一個(gè)與優(yōu)化無關(guān)但確實(shí)可能成為性能殺手可以說是bug的循環(huán)的 ' 例子。下面是源代碼:for;totalRead<m_totalBytes;totalRead+=readBytes readBytes=m_request, getInputStreamO. read m_binArray, tot alRead, m_totalBytes-totalRead ;這個(gè)代碼意圖很清楚,就是將一個(gè) InputStream 流讀到一個(gè) byte 數(shù) 組中去。它使用 read 方法循環(huán)讀取 InputStream ,該方

10、法返 回讀取的字 節(jié)數(shù)。正常情況下,該循環(huán)運(yùn)行良好,當(dāng) totalRead=m_totalBytes 時(shí),結(jié)束循環(huán),byte數(shù)組被正常填充。但如果仔細(xì)看一下InputStream的read 方法的說明,了解一下其返回 值就會(huì)發(fā)現(xiàn),返回值可能為 -1, 即己讀到 InputStream 末尾再繼續(xù) 讀時(shí)。如果發(fā)生讀取異常,可能出現(xiàn)這個(gè)問題, 而這個(gè)循環(huán)沒有檢 查 readBytes 值是否為 -1 就往 totalRead 上加,這樣 再次進(jìn)入循環(huán) 體繼續(xù)讀取 InputStream, 又返回 -1, 繼續(xù)循環(huán)。 如此循環(huán)直 到int溢出才會(huì)跳出循環(huán)。而這個(gè)循環(huán)也就成了實(shí)實(shí)在在的CPU殺手,可以

11、占去大量的CPU寸間取決于操作系統(tǒng)。其實(shí)解決很簡單,對(duì)readBytes 進(jìn)行判斷,如果為 -1 那么跳出循環(huán)。這個(gè)例子告訴我們:對(duì)循環(huán)一定要搞清循環(huán)的循環(huán)規(guī)模、每次循 環(huán)體 執(zhí)行寸間、循環(huán)結(jié)束條件包括異常情況等,只有這樣才能寫出 高效且沒 有隱患的代碼。電腦 ktv 點(diǎn)歌系統(tǒng)雙屏設(shè)置,怎么設(shè)置 ktv 點(diǎn)歌系統(tǒng)雙屏一1、在桌面點(diǎn)擊鼠標(biāo)右鍵, 再用鼠標(biāo)左鍵點(diǎn)擊“屬性, 彈出下 而圖1的對(duì)話框:點(diǎn)擊“設(shè)置選項(xiàng),可以看到屏幕中間出現(xiàn)了兩個(gè)框, 1 為實(shí)線 框代 表你目前正在使用的顯示器, 2 為虛線框,代表你要設(shè)置的第 二個(gè)監(jiān)視器。 如下圖 2:點(diǎn)擊有虛線框的 2 顯示器,進(jìn)行對(duì)第 2 監(jiān)視器的編

12、輯。女嘰圖 3把“將windows桌面擴(kuò)展到該監(jiān)視器上勾選中,此時(shí)2顯示器變?yōu)閷?shí) 線框,女嘰圖 4。此寸你可以對(duì) 2顯示器進(jìn)行屏幕分辨率和顏 色質(zhì)量的 相應(yīng)設(shè)置。為了確認(rèn)我們是否設(shè)置成功。你可以點(diǎn)擊“識(shí)別按鈕,此時(shí)你 的電 腦顯示器上會(huì)顯示一個(gè)大的口色的 1, 而你的電視機(jī)翻開電源 的電視機(jī) 并且連接上顯卡的視頻輸出上會(huì)顯示一個(gè)大的口色的 2, 說明你設(shè)置成 功。操作到這一步,你電腦 ktv 點(diǎn)歌系統(tǒng)雙屏設(shè)置就成功了!是不是 很簡 單咧!PowerPoint ji 幻燈片制作教程一課程 8:自動(dòng)切換和循環(huán)音樂八、自動(dòng)切換和循環(huán)音樂 有時(shí)候我們想讓幻燈片一張一張自動(dòng)播放,同時(shí)播放一首背景音 樂,

13、從而產(chǎn)生出電影的效果,下而我們通過一個(gè)練習(xí)來學(xué)習(xí)操作;1、插入音樂1啟動(dòng) PowerPoint, 自動(dòng)翻開一個(gè)空白文檔;2點(diǎn)菜單“文件 -翻開命令,翻開上一課的幻燈片“動(dòng)作設(shè) 置 ?3選中第一張幻燈片,點(diǎn)“插入 -影片和聲音 -文件中的聲音,在 出來的提示框中選擇“自動(dòng)播放;這樣就會(huì)在幻燈片中央出來一個(gè)小喇叭圖標(biāo), 這是我們插入的音樂對(duì) 象;點(diǎn)菜單“文件 - 另存為,以“循環(huán)切換為文件名,保存文件 到自己的文件夾;2、設(shè)置音樂1在出來的小喇叭上敲右鍵,選擇“編輯聲音對(duì)象,出來一個(gè)對(duì)話框;把兩個(gè)勾都打上,這樣音樂就可以一直播放,直到停止,點(diǎn)“確 定 返回;2設(shè)置停止,在小喇叭上點(diǎn)右鍵,選擇“自定義動(dòng)畫,右邊的窗格出來動(dòng)畫選項(xiàng);2在音樂右邊的下拉按鈕上點(diǎn)一下,在出來的菜單中選“效果選 項(xiàng),出來一個(gè)面板;3在效果選項(xiàng)面板中,單擊中間的停止,選擇“在 6 張幻燈片后, 因?yàn)檠菔疚母蹇偣灿?6 張;點(diǎn)“確定返回,保存一下文件,放映一下看看效果;3、幻燈片切換1選中第一張

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論