1. 程式人生 > >第三章 Java程式優化(待續)

第三章 Java程式優化(待續)

字串優化處理

String物件及其特點

String物件是java語言中重要的資料型別,但它並不是Java的基本資料型別。在C語言中,對字串的處理最通常的做法是使用char陣列,但這種方式的弊端是顯而易見的,陣列本身無法封裝字串操作所需的基本方法。而在Java語言中,String物件可以認為是char陣列的延伸和進一步封裝。String類的內部結構是由:char陣列、offset偏移、count長度組成。char陣列表示String內容,它是String物件所表示字串的超集。String的真實內容還需要由偏移量和長度在這個char陣列中進行定位和擷取。

在Java語言中,Java設計者對String物件進行了大量優化,其主要表現在以下3個方面,同時也是String物件的3個基本特點:

  1. 不變性
  2. 針對常量池的優化
  3. 類的final定義針對常量池的優化:指當兩個

不變性:不變性是指String物件一旦生成,則不能再對它進行改變。String的這個特性可以泛化成不變模式,即一個物件的狀態在物件被建立之後就不再發生變化。不變模式的主要作用在於當一個物件需要被多執行緒共享,並且訪問頻繁時,可以省略同步和鎖的等待時間,從而大幅度提高系統性能

針對常量池的優化:指兩個string物件擁有相同的值時,它們只引用常量池中的同一個拷貝。當同一個字串反覆出現時,這個技術可以大幅度節省記憶體空間

  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卻重新開闢了一塊記憶體空間,但str3在常量池中的位置和str1是一樣的,也就是說,雖然str3單獨佔用了堆空間,但是它所指向的實體和str1完全一樣。最後一行使用intern()方法,該方法返回String物件在常量池中的引用

類的final定義:除以上兩點外

核心資料結構

使用NIO提升效能

引用型別

有助於改善效能的技巧