JAVA記憶體分配規則

2021-08-27 15:29:33 字數 758 閱讀 3215

*物件分配規則

1.物件優先分配在eden

區,如果

eden

區沒有足夠的空間時,虛擬機器執行一次

minor gc。

2.大物件直接進入老年代(大物件是指需要大量連續記憶體空間的物件)。這樣做的目的是避免在eden

區和兩個

survivor

區之間發生大量的記憶體拷貝(新生代採用複製演算法收集記憶體)。

3.長期存活的物件進入老年代。虛擬機器為每個物件定義了乙個年齡計數器,如果物件經過了1

次minor gc

那麼物件會進入

survivor

區,之後每經過一次

minor gc

那麼物件的年齡加

1,直到達到閥值物件進入老年區。

4.動態判斷物件的年齡。如果survivor

區中相同年齡的所有物件大小的總和大於

survivor

空間的一半,年齡大於或等於該年齡的物件可以直接進入老年代。

5.空間分配擔保。每次進行minor gc

時,jvm

會計算survivor

區移至老年區的物件的平均大小,如果這個值大於老年區的剩餘值大小則進行一次

full gc

,如果小於檢查

handlepromotionfailure

設定,如果

true

則只進行

monitor gc,

如果false

則進行full gc。 

Java記憶體分配

大多數情況,物件在新生代eden區中分配。當eden去沒有足夠記憶體空間分配時,進行minor gc。大物件是指連續占用記憶體空間的物件,比如很長的字串以及陣列。用乙個年齡計數器,每次minor gc後存活的物件移動到survior空間,並且計數器加1.年齡計數器大於一定值 預設是15 將晉公升到老...

JAVA類記憶體分配

1 成員變數和區域性變數的區別 理解 1 在類中的位置不同 成員變數 類中方法外 區域性變數 方法定義中或者方法宣告上 2 在記憶體中的位置不同 成員變數 在堆中 區域性變數 在棧中 3 生命週期不同 成員變數 隨著物件的建立而存在,隨著物件的消失而消失 區域性變數 隨著方法的呼叫而存在,隨著方法的...

C C 程式 記憶體分配規則(堆疊的系統分配規則)

乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由 編譯器自動分配釋放 存放 函式的引數名,區域性變數的名等。其操作方式類似於 資料結構中的棧。2 堆區 heap 由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與 資料結構中的堆是兩回事,分配方式倒...