Java中堆記憶體和棧記憶體詳解

2021-07-09 15:40:50 字數 548 閱讀 6601

類的成員變數都在堆上,只有方法裡面定義的基礎變數,在方法裡面定義的引用

其他物件的引用放在棧上(這個時候被引用的物件和它的成員變數還是在堆上)

也就是說,執行緒上下文的東西在棧上,其他統統在堆上。

1.暫存器:最快的儲存區, 由編譯器根據需求進行分配,我們在程式中無法控制。

2.棧:存放基本型別的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new 出來的物件)或者常量池中(字串常量物件存放在常量池中)。

3.堆:存放所有new出來的物件。

4.靜態域:存放靜態成員(static定義的)。

5.常量池:存放字串常量和基本型別常量(public static final)。

6.非ram儲存:硬碟等永久儲存空間。

不是,樓上回答的已經很完善了,棧裡面存放基本型別的變數資料和物件的引用,比如int i=1;這是放在棧裡面的;string s=new string("123");這個裡面,s是放在棧裡面的,而new出來的string型別物件是放在堆裡的。

區分放在地方是看型別決定不是作用域決定的哈

堆記憶體和棧記憶體詳解

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

堆記憶體和棧記憶體詳解

堆記憶體和棧記憶體詳解 2010年06月06日 星期日 8 45 堆 順序隨意 棧 先進後出 堆和棧的區別 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中...

堆記憶體和棧記憶體詳解

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