java記憶體模型

來源:互聯網
上載者:User

標籤:自動   ble   過程   地址   tab   運行   ges   static   相關   

基礎資料型別 (Elementary Data Type):

基礎資料型別 (Elementary Data Type) 大小 範圍 預設值
int(整形) 32 -2147483648~2147483648 0
long(長整形) 64 -9233372036854477808~9233372036854477808 0
float(浮點形) 32 -3.40292347E+38~3.40292347E+38 0.0f
double(雙精確度) 64 -1.79769313486231570E+308~1.79769313486231570E+308 0.0d
short(短整型) 16 -32768~32768 0
boolean(布爾型) 1 true/false false
char(字元型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
byte(位元組型) 8 -128~127 0

引用資料類型:

類、介面類型、數群組類型、枚舉類型、註解類型。

區別:

基礎資料型別 (Elementary Data Type)在被建立時,在棧上給其劃分一塊記憶體,將數值直接儲存在棧上。

引用資料類型在被建立時,首先要在棧上給其引用(控制代碼)分配一塊記憶體,而對象的具體資訊都儲存在堆記憶體上,然後由棧上面的引用指向堆中對象的地址。

例如,有一個類Person,有屬性name,age,帶有參的構造方法,

Person p = new Person("zhangsan",20);

在記憶體中的具體建立過程是:

1.首先在棧記憶體中位其p分配一塊空間;

2.在堆記憶體中為Person對象分配一塊空間,並為其三個屬性設初值"",0;

3.根據類Person中對屬性的定義,為該對象的兩個屬性進行賦值操作;

4.調用構造方法,為兩個屬性賦值為"Tom",20;(注意這個時候p與Person對象之間還沒有建立聯絡);

5.將Person對象在堆記憶體中的地址,賦值給棧中的p;通過引用(控制代碼)p可以找到堆中對象的具體資訊。

相關知識:

靜態區: 儲存自動全域變數和 static 變數(包括 static 全域和局部變數)。靜態區的內容在總個程式的生命週期內都存在,由編譯器在編譯的時候分配。

堆區:  一般由程式員分配釋放,由 malloc 系列函數或 new 操作符分配的記憶體,其生命週期由 free 或 delete 決定。在沒有釋放之前一直存在,直到程式結束,由OS釋放。其特點是使用靈活,空間比較大,但容易出錯

棧區: 由編譯器自動分配釋放,儲存局部變數,棧上的內容只在函數的範圍記憶體在,當函數運行結束,這些內容也會自動被銷毀,其特點是效率高,但空間大小有限

文字常量區: 常量字串就是放在這裡的。   程式結束後由系統釋放。

程式碼區:存放函數體的二進位代碼。

java記憶體模型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.