1. 程式人生 > >簡述Java記憶體分配和回收策略以及Minor GC 和 Major GC(Full GC)

簡述Java記憶體分配和回收策略以及Minor GC 和 Major GC(Full GC)

記憶體分配

1. 棧區:棧可分為Java虛擬機器和本地方法棧

2. 堆區:堆被所有執行緒共享,在虛擬機器啟動時建立,是唯一的目的是存放物件例項,是gc的主要區域。通常可分為兩個區塊年輕代和年老代。更新一點年輕代可分為Eden區,主要放新建立物件,From survivor 和 To survivor 儲存 gc 後倖存下的物件,預設情況下各自佔比 8:1:1。

3. 方法區:被所有執行緒共享,用於存放已被虛擬機器載入的資訊,常量,靜態變數等,是Java虛擬機器描述為堆的一個邏輯部分。習慣被稱為永久代。

4. 程式計數器:是當前執行緒所執行的行號指示器,跳轉指令等都依賴這個完成,執行緒私有。

回收策略以及Minor GC 和 Major GC(Full GC)

1. 物件優先在堆區的Eden區分配。

2. 大物件直接進入老年代。

3. 長期存活的物件直接進入老年代。

回收:當Eden區沒有足夠的空間分配時,虛擬機器會執行一次Minor GC .Minor GC通常發生在Eden新生代,因為這個區的物件生存期短,發生頻率高,回收速度快。Major GC發生在老年代,一般觸發老年代的GC不會觸發Minor GC ,但是通過配置,可以在之前進行一次Minor GC,能加快老