先從這張圖來看JVM的內存模型,而後我再分別介紹各內存區的做用:java
類裝載子系統根據類的全限定名獲取定義類的二進制字節流;將這個字節流所表明的靜態存儲結構轉化爲方法區中的運行時數據結構;而後在堆中建立一個表明這個類的java.lang.Class對象,做爲方法區中靜態數據的訪問入口。數據結構
方法區被全部線程共享,方法區存放的信息有:線程
a. 類的類型信息,這類型信息由類加載器從類文件中提取,包括:對象
b. 類的static變量、final變量(全部對象共享一分拷貝)接口
c. 類的屬性信息,也稱域信息,包括:內存
d. 類的方法信息,包括:it
e. 常量池,用於存放類、方法的各類符號引用。變量
f. 加載一個類的類加載器的引用引用
g. Class類的引用二進制
堆區存放運行時的全部對象、實例,它也是GC管理的主要區域。
每啓動一個新的線程,就會被分配一個棧;每一次的方法調用,就是一次從入棧到出棧的過程。
與Java棧相似,只是它用於本地方法調用。
程序計數器,老是指向該線程下一步要執行的指令,指令的位置放在方法區的方法字節碼中。程序計數器的值或內容是相對第一個指令的偏移量。