Java之記憶體分析和String對象

來源:互聯網
上載者:User

  Java中記憶體分析:

  棧(Stack) :存放基本類型的變數資料和對象的 引用,但對象本身不存放在棧中,而是存放在堆(new 出來的對象)或者常量池中(字串常量對象存放在常量池中)。  堆(heap):存放所有new出來的對象。  常量池(constant pool):在堆中分配出來的一Block Storage地區,存放儲顯式的String常量和基本類型常量(float、int等)。另外,可以儲存不經常改變的東西(public static final)。常量池中的資料可以共用。  靜態儲存:存放靜態成員(static定義的)。

  

1)

  String a = "abc";①
  String b = "abc";②
  分析:
  ①代碼執行後在常量池(constant pool)中建立了一個值為abc的String對象,②執行時,因為常量池中存在"abc"所以就不再建立新的String對象了。 2)
  String   c   =   new   String("xyz");①
  String d = new String("xyz");②
  分析:①Class被載入時,"xyz"被作為常量讀入,在常量池(constant pool)裡建立了一個共用的值為"xyz"的String對象;然後當調用到new String("xyz")的時候,會在堆(heap)裡建立這個new   String("xyz")對象;②由於常量池(constant pool)中存在"xyz"所以不再建立"xyz",然後建立新的new String("xyz")。
3)
  String   s1   =   new   String("xyz");     //建立二個對象(常量池和棧中),一個引用 
  String s2 = new String("xyz"); //建立一個對象(棧中),並且以後每執行一次建立一個對象,一個引用

  String s3 = "xyz"; //建立一個對象(常量池中),一個引用
  String s4 = "xyz"; //不建立對象(共用上次常量池中的資料),只是建立一個新的引用
4)
public class TestStr { 
public static void main(String[] args) {
// 以下兩條語句建立了1個對象。"鳳山"儲存在字串常量池中
String str1 = "鳳山";
String str2 = "鳳山";
System.out.println(str1==str2);//true

//以下兩條語句建立了3個對象。"天峨",儲存在字串常量池中,兩個new String()Object Storage Service在堆記憶體中
String str3 = new String("天峨");
String str4 = new String("天峨");
System.out.println(str3==str4);//false

//以下兩條語句建立了1個對象。9是儲存在棧記憶體中
int i = 9;
int j = 9;
System.out.println(i==j);//true

//由於沒有了裝箱,以下兩條語句建立了2個對象。兩個1Object Storage Service在堆記憶體中
Integer l1 = new Integer(1);
Integer k1 = new Integer(1);
System.out.println(l1==k1);//false
  //以下兩條語句建立了1個對象。1Object Storage Service在棧記憶體中。自動裝箱時對於值從127之間的值,使用一個執行個體。
Integer l = 20;//裝箱
Integer k = 20;//裝箱
System.out.println(l==k);//true
//以下兩條語句建立了2個對象。i1,i2變數儲存在棧記憶體中,兩個256Object Storage Service在堆記憶體中 
Integer i1 = 256;
Integer i2 = 256;
System.out.println(i1==i2);//false
}
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.