1.類加載子系統java
負責從文件系統或網絡中加載Class信息web
2.方法區算法
存放加載的類信息,jdk1.7以前稱爲永久代(Perm),1.8以後爲元數據區(Metaspace)數組
☞也稱」永久代」 ,它用於存儲虛擬機加載的類信息、常量、靜態變量、是各個線程共享的內存區域。能夠經過-XX:PermSize 和 -XX:MaxPermSize 參數限制方法區的大小。網絡
☞運行時常量池:是方法區的一部分,其中的主要內容來自於JVM對Class的加載。spa
☞Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息是常量池,用於存放編譯器生成的各類符號引用,這部份內容將在類加載後放到方法區的運行時常量池中。線程
3.Java堆code
在虛擬機啓動時創建,幾乎全部的Java對象實例都存在堆中,全部線程共享orm
☞GC堆是java虛擬機所管理的內存中最大的一塊內存區域,也是被各個線程共享的內存區域,在JVM啓動時建立。對象
☞其大小經過-Xms(最小值)和-Xmx(最大值)參數設置,-Xms爲JVM啓動時申請的最小內存,-Xmx爲JVM可申請的最大內存。
☞因爲如今收集器都是採用分代收集算法,堆被劃分爲新生代和老年代。新生代由S0和S1構成,可經過-Xmn參數來指定新生代的大小。
☞全部對象實例以及數組都在堆上分配。
☞Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項信息是常量池,用於存放編譯器生成的各類符號引用,這部份內容將在類加載後放到方法區的運行時常量池中。
4.直接內存
系統的直接內存區域,訪問該部分的速度優於Java堆
5.垃圾回收系統
對方法區,Java堆和直接內存的垃圾對象進行回收
6.Java棧(Java虛擬機棧)
每一個線程都有一個私有的棧,棧中保存着幀信息,局部變量,方法參數,與方法調用和返回密切相關
☞線程私有的,它的生命週期與線程相同
☞每一個方法被執行的時候都會建立一個"棧幀",用於存儲局部變量表(包括參數)、操做數棧、動態連接、方法出口等信息。每一個方法被調用到執行完的過程,就對應着一個棧幀在虛擬機棧中從入棧到出棧的過程。
☞局部變量表存放各類基本數據類型boolean、byte、char、short等
7.本地方法棧
本地方法棧則是爲Native方法服務
8.PC寄存器(程序計數器)
是一塊較小的內存空間,能夠看做當前線程所執行的字節碼的行號指示器。在虛擬機的模型裏,字節碼解釋器工做時就是經過改變這個計數器的值來選取下一條須要執行的字節碼指令,分支、循環、異常處理、線程恢復等基礎功能都須要依賴計數器完成。
9.執行引擎
執行虛擬機的字節碼