JVM 的基本結構

一   基本結構函數

    

二  程序計數器(PC)

    PC 寄存器是每一個線程的私有空間,JAVA虛擬機會爲每個JAVA線程建立PC寄存器。任意時刻,一個JAVA線程老是在執行一個方法,這個方法被稱爲當前方法,若是當前方法不是本地方法,PC 寄存器就會指向當前正在被執行的指令。若是當前方法是本地方法,那麼PC寄存器的值就是undefined。spa

三 堆

  JAVA堆是和JAVA應用程序關係最爲密切的內存空間,幾乎全部的對象都放在堆中。線程

  堆空間的通常結構 以下圖代理

 

  在絕大多數狀況下,對象首先分配在eden區,在一次新生代回收後,若是對象還存活,則會進入S0 或者S1,以後,每通過一次新生代回收,若是對象存活,它的年齡就會加1。當對象的年齡到達必定條件後,就會被認爲老年對象,從而進入老年代。指針

 

四 棧

  棧的結構 以下圖對象

因爲每次函數調用都會生產對應的棧幀,從而佔用必定的棧空間,所以,若是棧空間不足,那麼函數調用天然沒法進行下去,當請求的棧深度大於最大可用棧深度時,系統就會拋出StackOverflowError棧溢出錯誤。內存

局部變量表

局部變量表示棧幀的重要組成部分之一。用於保存函數的參數以及局部變量。若是函數的參數和局部變量較多,會使得局部變量膨脹,從而每一次函數調用就會佔用更多的棧空間虛擬機

操做數棧

 用於保存計算過程的中間結果,同時做爲計算過程當中變量臨時的存儲空間。變量

 

幀數據區

 保存着訪問常量池的指針,方便程序訪問常量池。請求

五 方法區

  方法區是一塊全部線程共享的內存區域。他用保存系統的類信息,好比類的字段,方法,常量池等。方法區的大小決定了系統能夠保存多少類,致使方法區溢出。在JDK 6,7中能夠理解爲永久區。若是系統使用了一些動態代理,那麼有可能在運行時生產大量的類。若是這樣就須要設置一個合理的永久

相關文章
相關標籤/搜索