JVM筆記2-Java虛擬機內存管理簡介

java虛擬機內存管理圖以下圖所示:java

1.線程共享區,是全部的線程所共用的,線程共享區有一下幾個組成:優化

  1.方法區:線程

        1.運行時常量池,已經被虛擬機加載的類信息(1.類的版本信息,2.字段,3.方法,4.接口等),常量,靜態變量,即時編譯器編譯後的代碼等數據。對象

        2.垃圾回收器也會光顧這個區域,例如常量池。blog

        3.HotSpot中用方法區來實現永久代。這樣的作的好處就是,垃圾回收器能夠像管理java堆同樣管理這部份內存,省去了爲方法區編寫內存管理的工做,注意的是這接口

        僅僅限於HotSpot中,其餘的虛擬機並無永久代這個概念,虛擬機規範中,永久代不等於方法區,並且沒有進行詳細的規範說明。用方法區實現永久代並非一個很好的途徑內存

        HotSpot在JDK1.7中進行的改進。get

 

  2.java堆:編譯器

        1.存儲對象實例,能夠人做爲全部對象的實例存儲在這裏,涉及編譯優化和虛擬機優化的時候有些對象實例並不存儲在這裏。虛擬機

        2.垃圾收集器管理的主要區域。

        3.長時間存活的對象實例會被放入老年代去,不長期存活的會在新生代中。

        4.當對空間申請完後會拋出OutOfMemory的內存溢出異常。

  

2.線程獨佔區,是每個線程都有本身獨立的虛擬機棧,本地方法棧,程序計數器。

  1.虛擬機棧:存儲方法運行時所需的數據,成爲棧幀。

    1.虛擬機棧描述的是java方法執行的動態內存模型。

    2.棧幀:每一個方法的執行都會建立一個棧幀,伴隨着方法從建立到執行完成。用於存儲局部變量表,操做數棧,動態鏈接,方法出口等。

    3.局部變量表:

      1.存放編譯期可知的各類變量類型,引用類型,returnAddress類型。

      2.局部變量表的內存空間在編譯期完成分配,當進入一個方法時,這個方法須要在幀分配多少內存是固定的,方法運行期間不會改變局部變量表的大小。

    4.大小:虛擬機棧的空間是有限的。舉個例子。以下面代碼:

>>>>閱讀全文

相關文章
相關標籤/搜索