1. 程式人生 > 實用技巧 >jvm----記憶體區域及物件(原創筆記)

jvm----記憶體區域及物件(原創筆記)

(儘量以圖表形式總結)

在這裡插入圖片描述

記憶體區域

記憶體動態分配、垃圾收集技術是java與C++之間圍成的一堵高牆。
java虛擬機器HotSpot把其管理的記憶體分成不同用途的資料區,總結如下:

區域要點分析執行緒OutOfMemoryError
程式計數器選取位元組碼指令,指示程式控制流私有
虛擬機器棧描述java方法執行的執行緒模型:建立棧幀用於儲存區域性變量表(包括基本資料
型別、物件引用)、運算元棧、動態連線、方法出口等資訊
為java方法執行服務
私有
本地方法棧為本地(Native)方法執行服務,與虛擬機器棧功能相似私有棧深度溢位且有OOM
堆 Heap- 物件例項及陣列(棧上分配、標量替換、逃逸分析技術的發展,所有物件例項
都在堆上已不絕對)
-Xmx -Xms設定記憶體大小
共享
方法區- Non-Heap ,堆的邏輯部分,用於儲存型別資訊、常量、靜態變數、程式碼快取
- JDK 8後完
全放棄永久區概念,改為和JRockit、J9一樣的元空間共享
直接記憶體非jvm資料區,通過Native函式庫分配堆外記憶體,作用是避免java堆和Native堆
資料來回複製

物件

建立過程

序號步驟描述
1new定位類的符號引用,類載入(專門章節總結類載入過程)
2分配記憶體即在java堆裡劃分記憶體。分配方式:
1)指標碰撞,記憶體指標挪動物件大小相等的舉例(Serial、ParNew)
2)空閒列表,jvm維護一個列表記錄那些記憶體可用,分配給物件例項(CMS基於清除演算法的收集器)
取決於java堆是否規整,gc是否有空間壓縮整理能力
3必要設定物件頭設定(偏向鎖,雜湊碼,GC分代年齡等)
4初始化init()方法執行。真正構造出物件來