Java 記憶體分配策略
【宣告:】本文是作者(蘑菇v5)原創,版權歸作者 蘑菇v5所有,侵權必究。本文首發在簡書。如若轉發,請註明作者和來源地址!未經授權,嚴禁私自轉載!
Java 程式執行時的記憶體分配策略有三種,分別是靜態分配,棧式分配,和堆式分配,對應的,三種儲存策略使用的記憶體空間主要分別是靜態儲存區(也稱方法區)、棧區和堆區。
- 靜態儲存區(方法區):主要存放靜態資料、全域性 static 資料和常量。這塊記憶體在程式編譯時就已經分配好,並且在程式整個執行期間都存在。
- 棧區 :當方法被執行時,方法體內的區域性變數(其中包括基礎資料型別、物件的引用)都在棧上建立,並在方法執行結束時這些區域性變數所持有的記憶體將會自動被釋放。因為棧記憶體分配運算內建於處理器的指令集中,效率很高,但是分配的記憶體容量有限。
- 堆區 : 又稱動態記憶體分配,通常就是指在程式執行時直接 new 出來的記憶體,也就是物件的例項。這部分記憶體在不使用時將會由 Java 垃圾回收器來負責回收。
1.棧與堆的區別:
在方法體內定義的(區域性變數)一些基本型別的變數和物件的引用變數都是在方法的棧記憶體中分配的。當在一段方法塊中定義一個變數時,Java 就會在棧中為該變數分配記憶體空間,當超過該變數的作用域後,該變數也就無效了,分配給它的記憶體空間也將被釋放掉,該記憶體空間可以被重新使用。
堆記憶體用來存放所有由 new 建立的物件(包括該物件其中的所有成員變數)和陣列。在堆中分配的記憶體,將由 Java 垃圾回收器來自動管理。在堆中產生了一個陣列或者物件後,還可以在棧中定義一個特殊的變數,這個變數的取值等於陣列或者物件在堆記憶體中的首地址,這個特殊的變數就是我們上面說的引用變數。我們可以通過這個引用變數來訪問堆中的物件或者陣列。
舉個例子:
public class Sample {
int s1 = 0;
Sample mSample1 = new Sample();
public void method() {
int s2 = 1;
Sample mSample2 = new Sample();
}
}
Sample mSample3 = new Sample();
Sample 類的區域性變數 s2 和引用變數 mSample2 都是存在於棧中,但 mSample2 指向的物件是存在於堆上的。 mSample3 指向的物件實體存放在堆上,包括這個物件的所有成員變數 s1 和 mSample1,而它自己存在於棧中。
2. 結論:
區域性變數的基本資料型別和引用儲存於棧中,引用的物件實體儲存於堆中。—— 因為它們屬於方法中的變數,生命週期隨方法而結束。
成員變數全部儲存與堆中(包括基本資料型別,引用和引用的物件實體)—— 因為它們屬於類,類物件終究是要被new出來使用的。
相關文章
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- Java記憶體區域與分配策略Java記憶體
- 記憶體分配策略學習記憶體
- JVM GC 與 記憶體分配策略JVMGC記憶體
- Java虛擬機器記憶體分配與回收策略Java虛擬機記憶體
- JVM 之 記憶體分配與回收策略JVM記憶體
- JVM垃圾回收和記憶體分配策略JVM記憶體
- 【Java 虛擬機器筆記】記憶體分配策略相關整理Java虛擬機筆記記憶體
- 【Java學習筆記】垃圾收集器和記憶體分配策略Java筆記記憶體
- java-方法記憶體分配Java記憶體
- java基礎-記憶體分配Java記憶體
- 垃圾收集機制與記憶體分配策略記憶體
- 垃圾收集器與記憶體分配策略記憶體
- 【Java】 記憶體分配全面淺析Java記憶體
- 深入理解Java虛擬機器 --- 記憶體分配與回收策略Java虛擬機記憶體
- JVM 垃圾收集器與記憶體分配策略JVM記憶體
- Tensorflow2對GPU記憶體的分配策略GPU記憶體
- JVM垃圾回收器、記憶體分配與回收策略JVM記憶體
- 詳解Java 虛擬機器(第⑥篇)——記憶體分配與回收策略Java虛擬機記憶體
- 記憶體分配策略中,堆和棧的區別記憶體
- JVM記憶體分配策略,及垃圾回收演算法JVM記憶體演算法
- JVM(3)-垃圾收集器與記憶體分配策略JVM記憶體
- JVM-垃圾收集器與記憶體分配策略JVM記憶體
- JVM筆記(1.2)垃圾收集器和記憶體分配策略JVM筆記記憶體
- 深入理解Java虛擬機器筆記之六記憶體分配與回收策略Java虛擬機筆記記憶體
- 【JVM學習筆記】垃圾收集器與記憶體分配策略JVM筆記記憶體
- 深入理解Java虛擬機器-垃圾收集器與記憶體分配策略Java虛擬機記憶體
- 深入學習Java虛擬機器——垃圾收集器與記憶體分配策略Java虛擬機記憶體
- 深入理解Java虛擬機器 - 垃圾收集器與記憶體分配策略Java虛擬機記憶體
- 動態記憶體分配記憶體
- JVM深入淺出 -- Java記憶體分配機制JVMJava記憶體
- 《深入java虛擬機器》讀書筆記之垃圾收集器與記憶體分配策略Java虛擬機筆記記憶體
- 【面試必備】小夥伴栽在了JVM的記憶體分配策略。。。面試JVM記憶體
- 垃圾收集器與記憶體分配策略_垃圾收集演算法記憶體演算法
- 記憶體的分配與釋放,記憶體洩漏記憶體
- go記憶體分配器Go記憶體
- hadoop 記憶體分配規則Hadoop記憶體
- C語言-記憶體分配C語言記憶體
- 深度理解glibc記憶體分配記憶體