1.類加載器(Class Loader):加載類文件到內存。Class loader只管加載,只要符合文件結構就加載,至於能否運行,它不負責,那是有Exectution Engine 負責的。
2.執行引擎(Execution Engine):也叫解釋器,負責解釋命令,交由操作系統執行。
3.本地庫接口(Native Interface):本地接口的作用是融合不同的語言爲java所用
4.運行時數據區(Runtime Data Area):
(1)堆(線程共享)。堆是java對象的存儲區域,任何用new字段分配的java對象實例和數組,都被分配在堆上,java堆可用-Xms和-Xmx進行內存控制,jdk1.7以後,運行時常量池從方法區移到了堆上。
新生代:老年代=1:2 Eden:s1: s2=8:1:1
(2)方法區(線程共享):用於存儲已被虛擬機加載的類信息,常量,靜態變量,即時編譯器編譯後的代碼等數據。
(3)虛擬機棧(線程私有):虛擬機棧中執行每個方法的時候,都會創建一個棧楨用於存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
(4)本地方法棧(線程私有):與虛擬機發揮的作用相似,相比於虛擬機棧爲Java方法服務,本地方法棧爲虛擬機使用的Native方法服務,執行每個本地方法的時候,都會創建一個棧幀用於存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
(5)程序計數器(線程私有)。指示Java虛擬機下一條需要執行的字節碼指令。