1. 程式人生 > >Java記憶體區域——方法區

Java記憶體區域——方法區

儲存虛擬機器載入的類資訊,那麼,這個類資訊就有哪些資訊呢?這裡的類資訊其實非常多,比如,類的版本,欄位,方法,介面,這些描述資訊都是屬於類的資訊我們所執行的方法其實就會放到方法區中,除了類的資訊之外,就是常量靜態變數即時編譯器編譯後的程式碼等資料。這是我們方法區所儲存的一些資訊

方法區永久代,其實對於我們現在主流的虛擬機器,就是我們最熟悉的hosport,那麼在hosport上進行開發部署,很多人都願意把方法區稱之為永久代,為什麼呢?因為hosport虛擬機器的設計團隊把gc分代,收集擴充套件到了方法區中,也就是說,使用永久代來實現了方法區,那麼,這樣有什麼好處呢?其實就是hosport虛擬機器的垃圾收集器可以像管理Java堆一樣管理這部分記憶體,就能夠省去專門為方法區編寫記憶體管理程式碼的工作,其實這兩者並不等價,僅僅是對於hsport虛擬機器來講

,那麼,對於其他的虛擬機器,並不存在永久代的概念

對於永久代的說法,虛擬機器的規範中並沒有做詳細的介紹,並沒有做詳細的規範,但是從目前來看,用方法區來實現永久代,並不是一個好的途徑。其實我們只要知道方法區和永久代這兩者在Java虛擬機器規範中並不等價就可以了只是在hosport虛擬機器中,為了減少記憶體管理程式碼的工作,它省去了專門對這個方法區的編碼。

垃圾回收在方法區的行為,關於垃圾回收,我們會在後邊的內容中講解,這裡就簡單的提一下,就是說,我們知道垃圾回收最主要的區域是在Java堆中,方法區也算是堆的一個邏輯部分,但是,垃圾回收在方法區中出現的還是比較少的,主要是因為它回收的效率比較低,費的成本比較高,所以,一般很少會在這裡進行垃圾回收,但是,也會在這裡進行垃圾回收,比如說,針對常量池的回收,包括物件型別的解除安裝等等。

異常的定義,就是說,當我們在申請那個記憶體區域,申請失敗的情況下,同樣會丟擲一個異常,叫做OutOfMemoryError。