jvm內存筆記

目錄

一:non-heap

二:heap


美圖說個**,先上圖:

如上圖所示嘛:

 首先嘛JVM內存區分爲堆heap(上圖白色區域)、非堆non-heap(上圖藍色區域)。

堆和非堆。簡單來說堆就是Java代碼可及的內存,是留給開發人員使用的;非堆就是JVM留給 自己用的,

  • 一:non-heap

  1. 非堆中的方法區 Method Area (也稱永久帶)是用來存放類信息、常量、靜態變量的。這個內存區可以用上圖中橘黃色的參數進行配置;方法區中有一個常量池:用於存放各種符號引用;
  2. 虛擬機棧用於存放局部變量表(基本數據類型、對象引用等)、操作棧、方法出口;
  3. 本地方法棧與虛擬機棧基本類似,區別在於虛擬機棧爲虛擬機執行的java方法服務,而本地方法棧則是爲Native方法服務;
  4. 程序計數器用來記錄程序下一條指令。

  • 二:heap

1:堆內存用來存放對象實例和數組(所有new對象),這裏可以通過上面的橘黃色的參數配置大小;

2:堆內存分爲兩部分:

      a:年輕代Young;年輕代是用來存放剛創建的對象,可以使用上圖中的橘黃色參數配置大小;

      b:老年代Old;老年代是用來存放大對象或者已經存活了很久的對象;

3:其中年輕代又分爲三部分:

      a:Eden;

      b:From Survivor;

      c:To Survivor;

主要使用複製清除算法,在Eden內存塊和其中一個Survivor把需要保存的數據移到另一個Survivor,下次繼續反覆,直到15次之後便更新到老年代中,執行一次GC,命名爲 Minor GC。其中老年代稱爲Full GC。

 

參考鏈接:Java虛擬機的內存組成以及堆內存介紹

                  Xms Xmx PermSize MaxPermSize 區別

                  Java JVM 8-java堆新生代,老年代的劃分及回收算法

                  Java 新生代、老年代、持久代、元空間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章