一、Java對內存空間的劃分:五部分
- 棧
- 堆
- 方法區
- 本地方法區
- 寄存器
二、棧內存
- 存儲都是局部變量,只要是在方法中定義的變量都是局部變量;
- 每個線程包含一個棧區,棧中只保存基礎數據類型的對象和自定義對象的引用(不是對象);
- 每個棧中的數據(原始類型和對象引用)都是私有的,其他棧不能訪問;
- 棧分爲3個部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)。
- 一旦變量的生命週期結束,該變量就被釋放
三、堆內存
- 存儲都是實體(對象),凡事new創建的都在堆裏面;
- 存儲的全部是對象,每個對象都包含一個與之對應的class的信息。(class的目的是得到操作指令);
- 每一個實體都有一個首地址值。
- 堆內存中的變量都有默認的初始化值,不同類型不一樣 char-‘\u0000’。
- 當實體不再使用時,就會被垃圾回收機制處理。
四、方法區:
- 又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量。
- 方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變量。