Java中Heap與Stack的區別

2021-06-27 07:11:42 字數 549 閱讀 1401

一般常有堆記憶體(heap)棧空間(stack)的說法。以下是他們的區別:

1) heap是 stack的乙個子集。

2) stack訪問速度僅次於暫存器,stack裡面的資料可共享,但是其中資料的大小和生存期必須在執行前確定。

3) heap是執行時可動態分配的資料區,從速度看比stack慢,heap裡面的資料不共享,大小和生存期都可以在執行時再確定。

4) new關鍵字 是執行時在heap裡面建立物件。每new一次都一定會建立新物件,因為堆資料不共享。

eg: string str1= new string("abc");   (1)

string str2= "abc";               (2)

str1是在heap裡面建立的物件。

str2是指向stack裡面值為「abc」的引用變數,語句(2)的執行,首先會建立引用變數str2, 再查詢stack裡面有沒有「abc」,有則將 str2指向 「abc」,沒有則在stack裡面建立乙個「abc」,再將str2指向「abc」。

Java中Heap 堆 和Stack 棧

heap 堆 1 heap是stack的子集。2 heap是執行時可動態分配的資料區,從速度看比stack慢,heap裡面的資料不共享,大小和生存期都可以在執行時再確定。3 new關鍵字 是執行時在heap裡面建立物件。每new一次都一定會建立新物件,因為堆資料不共享。stack 棧 stack訪問...

Heap與Stack的區別

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...

Heap與Stack的區別

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...