5個部分
1.棧(stack) 存放的是方法中的區域性變數,
方法的執行一定要在棧當中執行喔!
區域性變數:方法的引數,或者是方法()內部的變數.
作用域:一旦超出作用域,立刻從棧記憶體中消失.
2.堆(heap)
凡是new出來的東西,都在堆當中.
堆記憶體中的資料,都有預設值,規則:
資料型別
預設值整數
預設值為0
浮點數預設值為0.0
字元預設值為\u0000
布林預設值為false
引用型別
預設值為null
3.方法區(method area):儲存.class相關資訊,與作業系統無關
4.本地方法棧(native method stack):與作業系統相關
5.暫存器(pc register):與cpu相關
陣列中記憶體的分布:
主要是在記憶體中的三個部分,棧,堆和方法區.
看下邊的一幅圖: array陣列裡有三個元素,0號元素,1號元素,2號元素
在記憶體中的分布詳解:(以兩個陣列在記憶體中的分布為例)
首先:方法區有乙個方法:將這個方法放在棧中.
public static void main(string args) {}
定義乙個新的陣列,可以發現左邊是變數,右邊是new 出來的東西.
根據上邊說的,變數放在棧裡,new出來的東西需要開闢一片記憶體,所以放在堆裡.
int array = new int[3];
在堆中,a陣列有3個元素,所以a陣列分成三份,其中0x666是位址值,位址值放在左邊棧中對應陣列裡(這個位址值就相當於乙個位址,可以根據這個位址找到相應的元素)
當給乙個元素賦值的時候,棧中的陣列會根據位址值找到堆中相應的陣列,根據索引找到具體的元素,然後新的賦值將初始值覆蓋.
記憶體管理之程式在記憶體中的分布
段 txt 也稱文字段 text segment 存放著程式的機器碼和唯讀資料,可執行指令就是從這裡取得的。如果可能,系統會安排好相同程式的多個執行實體共享這些例項 這個段在記憶體中一般被標記為唯讀,任何對該區的寫操作都會導致段錯誤 segmentation fault 已初始化的資料段 data ...
程式在記憶體中的分布
在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...
程式在記憶體中的分布
在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講 物理記憶體和虛擬記憶體。從硬體上講,虛擬空間是cpu內部的定址空間,位於mmu之前,物理空間是匯流排上的定址空間,是經過mmu轉換之後的空間。一般我們所說的程式在記憶體中的分布指的就是程式在虛擬記憶體中的儲存方式。從低位址到高位址,可分為下...