<code id="qf3hh"></code>
  • <menuitem id="qf3hh"></menuitem>
  • <strike id="qf3hh"><label id="qf3hh"></label></strike>

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

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

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

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

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

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

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

        不變性;

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

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

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

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

        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卻重新開辟了一塊內(nèi)存空間,但即便如此,str3在常量池的位置和str1是一 樣的,也就是說,雖然str3單獨(dú)占用了堆空間,但是它指向的實(shí)體和str1完全一樣。以上示例代碼中,最后一行使用intern()方法,該方法返回了 String對象在常量池中的引用。

      国产一级婬片AAA毛,无码中文精品视视在线观看,欧美日韩a人成v在线动漫,五月丁香青草久久
      <code id="qf3hh"></code>
    • <menuitem id="qf3hh"></menuitem>
    • <strike id="qf3hh"><label id="qf3hh"></label></strike>