不同虛擬機的運行時數(shù)據(jù)區(qū)可能略微有所不同,但都會遵從 Java 虛擬機規(guī)范,Java虛擬機規(guī)范規(guī)定的區(qū)域分為以下5個部分:
·程序計數(shù)器(Program Counter Register):當前線程所執(zhí)行的字節(jié)碼的行號指示器,字節(jié)碼解析器的工作是通過改變這個計數(shù)器的值,來選取下一條需要執(zhí)行的字節(jié)碼指令,分支、循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等基礎(chǔ)功能,都需要依賴這個計數(shù)器來完成;
·Java 虛擬機棧(Java Virtual Machine Stacks):用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息;
·本地方法棧(Native Method Stack):與虛擬機棧的作用是一樣的,只不過虛擬機棧是服務(wù)Java方法的,而本地方法棧是為虛擬機調(diào)用Native方法服務(wù)的;
·Java 堆(Java Heap):Java虛擬機中內(nèi)存最大的一塊,是被所有線程共享的,幾乎所有的對象實例都在這里分配內(nèi)存;
·方法區(qū)(Methed Area):用于存儲已被虛擬機加載的類信息、常量、靜態(tài)變量、即時編譯后的代碼等數(shù)據(jù)。