程序計數器緩存
本地方法棧
與虛擬機棧相似,爲Native方法服務多線程
Java虛擬機棧jvm
Java堆佈局
線程共享、惟一目的存放對象實例線程
方法區
存儲類型信息、常量、靜態變量、代碼緩存等指針
運行時常量池
編譯期生成的字面量和符號引用code
直接內存
Java堆中的DirectByteBuffer對象對這塊內存直接操做,避免數據在Native和Java堆中來回複製。對象
普通對象的建立過程內存
Java堆爲實例分配內存的方式cmd
選擇哪一種分配方式由Java堆是否規整決定的,而Java堆內存是否規整由垃圾回收器是否帶有空間壓縮整理能力決定的
Serial、ParNew === > 指針碰撞
CMS=== >空閒列表
連續空間
使用指針碰撞方式,移動被佔內存和可用空間的指針來分配。多線程發生內存衝突時,利用CAS加失敗重試保證分配;或者本地線程分配緩存(TLAB)方式分配內存
非連續空間
維護一張列表,記錄可用空間,分配內存更新列表
對象內存佈局
對象的兩種訪問定位
棧中的reference數據引用,引用分爲「句柄訪問」、「直接指針訪問」兩種