Java中堆和棧有什麼不同

2021-09-17 05:15:17 字數 375 閱讀 6395

每個執行緒都有自己的棧記憶體,用於儲存本地變數、方法引數和棧呼叫,乙個執行緒中儲存的變數對其它變數不可見。

堆是所有執行緒共享的公共區域,物件都在堆中建立,為了提公升效率,執行緒會從堆中建立快取到自己的棧中,如果多個執行緒同時訪問就會出現問題,因此volatile變數就發揮了作用,要求執行緒從主存中讀取變數值。

物件都在堆中,引用型別的變數其記憶體常分配於常量池或者堆中,例如字串常量、基本資料型別常量,需要通過new的方式建立。堆主要用於存放new出來的物件,訪問速度慢,可以在執行時動態分配記憶體,生存期不需要提前確定。

棧:八大基本資料型別變數(int、short、byte、long、float、double、boolean、char),物件的引用變數,其記憶體都分配在棧中, 變數出了作用域會自動釋放。

JAVA中的堆和棧

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

Java中堆和棧的區別

堆 是大家共有的空間,分全域性堆和區域性堆。全域性堆就是所有沒有分配的空間,區域性堆就是使用者分配的空間。堆在作業系統對程序初始化的時候分配,執行過程中也可以向系統要額外的堆,但是記得用完了要還給作業系統,要不然就是記憶體洩漏。棧 thread safe 的。每個 物件的資料成員也存在在棧中,每個函...

Java中Heap 堆 和Stack 棧

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