国内精品久久久久久久星辰影视-亚洲天堂久久精品成人-亚洲国产成人综合青青-91精品啪在线看国产网站-日韩一区二区在线观看

?
    開(kāi)發(fā)技術(shù) / Technology

    JAVA程序優(yōu)化之字符串優(yōu)化處理

    日期:2015年3月20日  作者:zhjw  來(lái)源:互聯(lián)網(wǎng)    點(diǎn)擊:700

    字符串是軟件開(kāi)發(fā)中最為重要的對象之一。通常,字符串對象或其等價(jià)對象(如char數組),在內存中總是占據了最大的空間塊。因此如何高效地處理字符串,必將是提高系統整體性能的關(guān)鍵所在。

      1.String對象及特點(diǎn)

      String對象是Java語(yǔ) 言中重要的數據類(lèi)型,但它并不是Java的基本數據類(lèi)型。在C語(yǔ)言中,對字符串的處理最通常的做法是使用char數組,但這種方式的弊端是顯而易見(jiàn)的,數 組本身無(wú)法封裝字符串操作所需的基本方法。而在Java語(yǔ)言中,String對象可以認為是char數組的延伸和進(jìn)一步封裝。Java中String類(lèi), 它注意由3部分組成:char數組,offset偏移量,String的長(cháng)度。char數組表示String的內容,它是String對象所表示字符串的 超集。String的真實(shí)內容還需要由偏移量和長(cháng)度在這個(gè)char數組中進(jìn)行定位和截取。理解這點(diǎn)很重要,這將有助于更好地了解后面闡述的有關(guān) String.subString()方法導致的內存泄漏問(wèn)題。

      在Java中,Java的設計者對String對象進(jìn)行了大量的優(yōu)化,其主要表現在一下三個(gè)方面,同時(shí)這也是String對象的三個(gè)基本特點(diǎn):

      不變性;

      不變性是指String對象一旦生成,則不能再對它進(jìn)行改變。String的這個(gè)特征可以泛化成不變模式,即一個(gè)對象的狀態(tài)在對象被創(chuàng )建之后就不再發(fā)生變化。不變模式的主要作用在于當一個(gè)對象需要被多線(xiàn)程共享,并且訪(fǎng)問(wèn)頻繁時(shí),可以省略同步和鎖等待的時(shí)間,從而大幅度提高系統性能。

      ps:不變模式是一個(gè)可以提高多線(xiàn)程程序的性能,降低多線(xiàn)程程序復雜度的設計模式。

      針對常量池的優(yōu)化;

      針對常量池的優(yōu)化指:當2個(gè)String對象擁有相同的值時(shí),他們只引用常量池中的同一個(gè)拷貝。當同一個(gè)字符串反復出現時(shí),這個(gè)技術(shù)可以大幅度節省內存空間。

      String str1="abc";

      String str2="abc";

      String str3=new String("abc");

      System.out.println(str1==str2);   //返回true

      System.out.println(str1==str3);   //返回false

      System.out.println(str1==str3.intern());   //返回true

      以上代碼顯示str1和str2引用了相同的地址,但是str3卻重新開(kāi)辟了一塊內存空間,但即便如此,str3在常量池的位置和str1是一 樣的,也就是說(shuō),雖然str3單獨占用了堆空間,但是它指向的實(shí)體和str1完全一樣。以上示例代碼中,最后一行使用intern()方法,該方法返回了 String對象在常量池中的引用。