最新java對象循環(huán)引用 java循環(huán)對象屬性大全

字號:

    人的記憶力會隨著歲月的流逝而衰退,寫作可以彌補記憶的不足,將曾經(jīng)的人生經(jīng)歷和感悟記錄下來,也便于保存一份美好的回憶。相信許多人會覺得范文很難寫?接下來小編就給大家介紹一下優(yōu)秀的范文該怎么寫,我們一起來看一看吧。
    java對象循環(huán)引用 java循環(huán)對象屬性篇一
     優(yōu)化一般意義上說是提高已有系統(tǒng)的性能,減少如內(nèi)存、數(shù)據(jù)庫、網(wǎng)絡(luò)帶寬等資源的占用,是在系統(tǒng)開發(fā)告一段落的前提下進行。yjbys小編分享一篇j2ee系統(tǒng)優(yōu)化之對象與循環(huán)給大家,希望大家認(rèn)真閱讀!
     條例一:盡量重用對象,避免創(chuàng)建過多短時對象
     對象在面向?qū)ο缶幊讨须S處可見,甚至可以毫不夸張的說是:“一切都是對象”。如何更好的創(chuàng)建和使用對象,是優(yōu)化中要考慮的一個重要方面。筆者將對象按使用分為兩大類:獨享對象和共享對象。獨享對象指由某個線程單獨擁有并維護其生命周期的對象,一般是通過new 創(chuàng)建的對象,線程結(jié)束且無其它對這個對象的引用,這個對象將由垃圾收集機制自動gc。共享對象指由多個線程共享的對象,各線程保持多個指向同一個對象的引用,任何對這個對象的修改都會在其它引用上得到體現(xiàn),共享對象一般通過factory工廠的getinstace()方法創(chuàng)建,單例模式就是創(chuàng)建共享對象的標(biāo)準(zhǔn)實現(xiàn)。獨享對象由于無其它指向同一對象的引用,不用擔(dān)心其它引用對對象屬性的修改,在多線程環(huán)境里,也就不需要對其可能修改屬性的方法加以同步,減少了出錯的隱患和復(fù)雜性,但由于需要為每個線程都創(chuàng)建對象,增加了對內(nèi)存的需求和jvm gc的負(fù)擔(dān)。共享對象則需要進行適當(dāng)?shù)耐?避免較大的同步塊,同時防止死鎖)。
     還有幾種特殊對象:不變對象和方法對象。不變對象指對象對外不含有修改對象屬性的方法(如set方法),外部要修改屬性只能通過new新的實例來實現(xiàn)。不變對象最大的好處就是無需擔(dān)心屬性被修改,避免了潛在的bug,并能無需任何額外工作(如同步)就很好的工作在多線程環(huán)境下。如jdk的 string對象就是典型的不變對象。方法對象簡單的說就是僅包含方法,不含有屬性的對象。由于沒有對象屬性,方法中無需進行修改屬性的操作,也就能采用 static方法或單例模式,避免每次使用都要new對象,減少對象的使用。
     那么該如何確定創(chuàng)建何種對象,這就要結(jié)合對象的使用方式和生命周期、對象大小、構(gòu)建花銷等方面來綜合考慮。如果對象生命周期較長,會存在修改操作,不能容忍其它線程對其的修改,就應(yīng)該采用獨享對象,如常見的bean類。而如果對象生命周期較長,且能為各個線程共享,就可以考慮共享對象。共享有2 種常見情況,一種是系統(tǒng)全局對象,如配置屬性等,各個線程應(yīng)該引用同一對象,任何對這個對象的修改都會影響其它線程;另一種是由于對象創(chuàng)建開銷較大,各線程對此對象是瞬時訪問,且無需再次讀取其屬性,如常見的date 對象,一般這種對象的使用是瞬時的,比如把它format成string,如果每次創(chuàng)建然后等待gc就會浪費大量內(nèi)存和cpu時間,較好做法就是做成共享對象,各個線程先set再使用,注意對進行set并訪問的方法要同步。不變對象一般使用在對象創(chuàng)建開銷較小(屬性較少,類層次較少),且需要能自由共享的情形。如一個對象里的常量對象,使用public static final aaa=new aaa(…) 創(chuàng)建。方法對象使用較廣,如util類、dao類等,這些對象提供操作其它對象(一般是bean對象)的接口,能對系統(tǒng)在層次和功能上進行解耦合。
     條例二:在循環(huán)處,多下功夫
     循環(huán)作為程序編寫的基本語法,可以說是隨處可見。一些小的細(xì)節(jié)能帶來性能上的提升,而對循環(huán)體的一些改寫,能帶來性能的大幅提升。
     比如最簡單的list遍歷,會有這樣的寫法:for(int i=0;i
     同樣是對list的'操作,如果要在遍歷同時進行增加和刪除操作,代碼如下:for(int i=0,j=();i=0;i--){(i);}。經(jīng)過測試,如果采用arraylist,兩種寫法在循環(huán)次數(shù)較少時沒有太大的區(qū)別,循環(huán)次數(shù)為1000,均為1ms以內(nèi),次數(shù)為10000,前一種為60ms左右,后一種為1ms以內(nèi),,而次數(shù)上到100000,前一種為 6000ms左右,后一種為15ms,隨著循環(huán)次數(shù)的增多,后一種較前一種的效率優(yōu)勢明顯提高。
     這是由collection庫arraylist的實現(xiàn)決定的,以下是jdk1.3的arraylist源碼:
     public object remove(int index)
     rangecheck(index);
     modcount++;
     object oldvalue = elementdata[index];
     int nummoved = size - index - 1;
     if (nummoved > 0)
     opy(elementdata, index+1, elementdata, index,nummoved);
     elementdata[--size] = null;
     // let gc do its workreturn oldvalue;
     >
     從中我們可以看出,nummoved代表了需要進行arraycopy操作的數(shù)量,它是由remove的位置決定的,如果index=0,也就是刪除第一個元素,則需要arraycopy后面的所有數(shù)據(jù),而如果index=size-1,則只需將最后一個元素設(shè)為null即可。所以從后面向前循環(huán) remove是比較好的寫法。
     如果list中的確存在較多的add或remove操作,且容量較大(如存儲幾萬個對象),則應(yīng)該采用linkedlist作為實現(xiàn)。linkedlist內(nèi)部采用雙向鏈表作為數(shù)據(jù)結(jié)構(gòu),比arraylist占用較多內(nèi)存空間,且隨機訪問操作較慢(需要從頭或尾循環(huán)到相應(yīng)位置),但插入刪除操作很快(僅需進行鏈表操作,無須大量移動或拷貝)。
     對于list操作如果循環(huán)規(guī)模較小,其實對性能影響非常小(ms級),遠遠不是性能瓶頸所在。但心中有著優(yōu)化的意識,并力求寫出簡潔高效的程序應(yīng)該是我們每個程序員的追求。而且一旦在循環(huán)規(guī)模較大時,如果有了這些意識,也就能有效的消除性能隱患。
     再舉一個與優(yōu)化無關(guān)但確實可能成為性能殺手(可以說是bug)的循環(huán)的例子。下面是源代碼:
     for(; totalread < m_totalbytes; totalread += readbytes)
     readbytes = utstream().read(m_binarray, totalread, m_totalbytes - totalread);
     這個代碼意圖很清楚,就是將一個inputstream流讀到一個byte數(shù)組中去。它使用read方法循環(huán)讀取inputstream,該方法返回讀取的字節(jié)數(shù)。正常情況下,該循環(huán)運行良好,當(dāng)totalread=m_totalbytes時,結(jié)束循環(huán),byte數(shù)組被正常填充。但如果仔細(xì)看一下 inputstream的read方法的說明,了解一下其返回值就會發(fā)現(xiàn),返回值可能為-1,即已讀到inputstream末尾再繼續(xù)讀時。如果發(fā)生讀取異常,可能出現(xiàn)這個問題,而這個循環(huán)沒有檢查readbytes值是否為-1就往totalread上加,這樣再次進入循環(huán)體繼續(xù)讀取 inputstream,又返回-1,繼續(xù)循環(huán)。如此循環(huán)直到int溢出才會跳出循環(huán)。而這個循環(huán)也就成了實實在在的cpu殺手,可以占去大量的cpu時間(取決于操作系統(tǒng))。其實解決很簡單,對readbytes進行判斷,如果為-1則跳出循環(huán)。
     這個例子告訴我們:對循環(huán)一定要搞清循環(huán)的循環(huán)規(guī)模、每次循環(huán)體執(zhí)行時間、循環(huán)結(jié)束條件包括異常情況等,只有這樣才能寫出高效且沒有隱患的代碼。
     電腦ktv點歌系統(tǒng)雙屏設(shè)置,怎么設(shè)置ktv點歌系統(tǒng)雙屏(一)
     ktv的點歌系統(tǒng)是需要設(shè)置雙屏的,我們應(yīng)該怎么設(shè)置呢,下面小編帶領(lǐng)大家一學(xué)習(xí)如何設(shè)置電腦ktv點歌系統(tǒng)雙屏設(shè)置
     1、在桌面點擊鼠標(biāo)右鍵,再用鼠標(biāo)左鍵點擊“屬性”,彈出下面(圖1)的對話框:
     點擊“設(shè)置”選項,可以看到屏幕中間出現(xiàn)了兩個框,1為實線框代表你目前正在使用的顯示器,2為虛線框,代表你要設(shè)置的第二個監(jiān)視器。如下(圖2):
     點擊有虛線框的2顯示器,進行對第2監(jiān)視器的編輯。如(圖3)
     把“將windows桌面擴展到該監(jiān)視器上勾選中,此時2顯示器變?yōu)閷嵕€框,如(圖4)。此時你可以對2顯示器進行屏幕分辨率和顏色質(zhì)量的相應(yīng)設(shè)置。
     為了確認(rèn)我們是否設(shè)置成功。你可以點擊“識別”按鈕,此時你的電腦顯示器上會顯示一個大的白色的1,而你的電視機(打開電源的電視機并且連接上顯卡的視頻輸出)上會顯示一個大的白色的2,說明你設(shè)置成功。
     操作到這一步,你電腦ktv點歌系統(tǒng)雙屏設(shè)置就成功了!是不是很簡單咧!
     powerpointji幻燈片制作教程—課程8:自動切換和循環(huán)音樂(一)
     八、自動切換和循環(huán)音樂
     有時候我們想讓幻燈片一張一張自動播放,同時播放一首背景音樂,從而產(chǎn)生出電影的效果,下面我們通過一個練習(xí)來學(xué)習(xí)操作;
     1、插入音樂
     1)啟動powerpoint,自動打開一個空白文檔 ;
     2)點菜單“文件- 打開”命令, 打開上一課的幻燈片“動作設(shè)置”;
     3)選中第一張幻燈片,點“插入-影片和聲音-文件中的聲音..”,在出來的提示框中選擇“自動播放”;
     這樣就會在幻燈片中央出來一個小喇叭圖標(biāo),這是我們插入的音樂對象;
     點菜單“文件-另存為”,以“循環(huán)切換”為文件名,保存文件到自己的文件夾;
     2、設(shè)置音樂
     1)在出來的小喇叭上敲右鍵,選擇“編輯聲音對象”,出來一個對話框;
     把兩個勾都打上,這樣音樂就可以一直播放,直到停止,點“確定”返回;
     2)設(shè)置停止,在小喇叭上點右鍵,選擇“自定義動畫..”,右邊的窗格出來動畫選項;
     2)在音樂右邊的下拉按鈕上點一下,在出來的菜單中選“效果選項”,出來一個面板;
     3)在效果選項面板中,單擊中間的停止,選擇“在 6張幻燈片后”,因為演示文稿總共有6張;
     點“確定”返回,保存一下文件,放映一下看看效果;
     3、幻燈片切換
     1)選中第一張幻燈片,點菜單“幻燈片放映-幻燈片切換”;
     2)右邊的窗格中出現(xiàn)許多切換效果,可以選擇一種;
     3)在下邊的換片方式中,去掉“單擊..”的勾,勾選下面的“每隔”,在旁邊的時間中輸入5秒;
     4)點一下下邊的“應(yīng)用于所有幻燈片”按鈕,這樣所有的幻燈片都是每隔5秒切換;
     當(dāng)然也可以一張一張設(shè)置,那些需要自動切換的幻燈片;
     5)保存一下文件,放映一下看看效果,是否是每隔5秒就自動到下一張幻燈片,同時一直播放音樂;
    s("content_relate");
    【j2ee系統(tǒng)優(yōu)化之對象與循環(huán)簡介】相關(guān)文章:
    1.
    j2ee系統(tǒng)優(yōu)化:對象與循環(huán)
    2.
    j2ee簡介
    3.
    j2ee的簡介
    4.
    j2ee技術(shù)簡介
    5.
    j2ee的簡介及背景
    6.
    系統(tǒng)內(nèi)存優(yōu)化方法
    7.
    android系統(tǒng)架構(gòu)簡介
    8.
    項目管理系統(tǒng)簡介