JVM記憶體分配演算法

2021-09-07 06:42:01 字數 635 閱讀 5646

1.gc演算法     2.g1演算法

gc演算法(keywords ,可達性分析,gcroot向下搜尋)

使用有向圖將引用型別標記出來,使用gcroot當做根節點,當gcroot有指向的時候說明有引用(可達性分析)

銷毀呼叫 finalize->放入f-queue (只有一次)

<1>標記清除演算法

在每乙個大塊空間當沒有引用的時候進行刪除,容易造成記憶體小碎片.

<2>複製演算法

edeson:survive:survive=8:1:1

建立一半空間供於使用,剩下一半空間供於清除後複製到另外一邊使用(新生代)

<3>標記整理演算法

清除的時候向一端移動清除 (老年代)

物件分配演算法

<1>大物件進入老年代

<2>長期的物件進入老年代

<3>時間過長達到進入老年代

tip:動態分配空間擔保(新生代缺少的動態分配空間將由老年代進行分配空間擔保)

**的標準:

<1>給物件賦予了空值.

<2>給物件賦予了新值,重新分配了空間.

記憶體洩漏的情況

<1>在堆中申請的空間未被釋放.(可解決)

<2>物件不使用了但仍然在記憶體中保留著.

g1記憶體**方法???

JVM記憶體分配

堆區 儲存的全部是物件,每個物件都包含乙個與之對應的class的資訊。class的目的是得到操作指令 vm只有乙個堆區 heap 被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身 棧區 每個執行緒包含乙個棧區,棧中只儲存基礎資料型別的物件和自定義物件的引用 不是物件 物件都存放在堆區中...

JVM記憶體分配

堆區 1.儲存的全部是物件,每個物件都包含乙個與之對應的class的資訊。class的目的是得到操作指令 2.jvm只有乙個堆區 heap 被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身 棧區 1.每個執行緒包含乙個棧區,棧中只儲存基礎資料型別的物件和自定義物件的引用 不是物件 物件...

jvm 物件記憶體分配方式總結

通常來說關於jvm對於物件的記憶體分配,只要到堆內分配一般就over了,但是在很多人的部落格或者帖子中又說了一些其他的分配,比如棧內分配等等,搞的自己有點眼暈,索性就將jvm記憶體分配的方式統統查了一遍,然後總體上給縷一下。一來是方便自己,權當讀書筆記,二來希望有人能一起討論下。jvm在記憶體區域中...