JVM運行時數據區能夠劃分爲5部分,分別是:程序計數器、虛擬機棧、本地方法棧、堆、方法區java
至關於當前線程所執行字節碼的行號指示器。
程序計數器是線程隔離的。
程序計數器區域是以上五個區域中惟一一個不會報OutOfMemoryError的區域。數組
每一個方法在執行時都會建立一個棧楨(存放局部變量表,操做數棧等),每一個方法的嗲歐勇和執行完成,就表明着棧楨在虛擬機棧中入棧和出棧的過程。簡單地說,虛擬機棧就是爲JVM執行java方法(字節碼)的區域。
虛擬機棧是線程隔離的。
當線程請求的棧深度大於虛擬機棧的深度時,StackOverFlowError。
當虛擬機棧須要擴展且沒法申請到足夠內存時,OutOfMemoryError。線程
相似於虛擬機棧的解釋,簡單說本地方法棧就是爲JVM提供Native方法服務。
Native方法:java程序調用非java語言實現的接口,好比底層的一些驅動硬件的接口,以C語言實現。對象
存放實例對象以及數組,可劃分爲Eden,From Survivor,To Survivor。在物理內容上能夠是不連續的,堆是可擴展的(-xmm,-xms參數),當堆中無空間來爲實例對象分配內存且堆沒法擴展空間時,OutOfMemoryError。blog
存儲JVM的類加載信息、常量、靜態變量等,又稱爲Non-Heap,常量池也爲方法區的一部分。
___接口