關於簡單的GC演算法理解

2021-10-23 08:16:37 字數 693 閱讀 9748

首先,最基礎的gc演算法有三個:

標記/清除演算法:通過gc root物件進行遍歷,對從gc root物件可達的物件都加乙個標記,即標記其為可達物件,然後再對堆記憶體進行遍歷,如果乙個物件沒有該標記,那就直接從堆記憶體中**這個物件。

複製演算法:把記憶體分成兩個部分,使用其中一塊,當這一塊記憶體使用完,需要gc的時候,就把還存活的物件複製到另一塊記憶體中,然後把前面那一塊記憶體全部清除。

標記/整理演算法:通過gc root物件進行遍歷,對從gc root物件可達的物件都加乙個標記,即標記其為可達物件,然後將所有存活物件都整理到一端,將端線另一邊的物件(即死亡物件)清除。

比較:標記清除演算法:缺點:清除的時候要遍歷堆記憶體,效率低;記憶體碎片大,為新的物件(大物件)分配記憶體空間時容易引起新一輪gc

複製演算法:優點:比標記清楚效率高。缺點:記憶體需要分割槽,代價太高;如果物件存活率高(甚至為100%)那麼意味著所有的物件都要複製一邊到另一半記憶體,效率低。

綜合上述優點產生了:分代收集演算法

首先將記憶體按照物件存活的時間週期分為:新生代(物件很快死亡),老年代(長期存活的物件),永久代(hotspot特有,一般不進行gc,這裡不討論)

新生代:複製演算法,因為存活下來的物件少,所以複製的物件也少,效率就高了

A 演算法理解

廣度優先 bfs 和深度優先 dfs 搜尋 深度優先搜尋,用俗話說就是不見棺材不回頭。演算法會朝乙個方向進發,直到遇到邊界或者障礙物,才回溯。一般在實現的時候,我們採用遞迴的方式來進行,也可以採用模擬壓棧的方式來實現。如下圖,s代表起點,e代表終點。我們如果按照右 下 左 上這樣的擴充套件順序的話,...

dijkstra 演算法理解

求有向圖中乙個源點到其他頂點的最短距離 自己的理解 剛開始的時候相當於有三個集合 v 頂點集合 s 已求得的最短距離頂點集合,假設求a到其他頂點的最短距離 s 剩餘頂點集合 d 儲存的是最短距離值 求一維陣列中的最小值的下標,這個陣列不包含已經求得的頂點 找出最小值下標後,放入到s中,然後求剩餘頂點...

KM演算法理解

二分圖帶權匹配與最佳匹配 什麼是二分圖的帶權匹配?二分圖的帶權匹配就是求出乙個匹配集合,使得集合中邊的權值之和最大或最小。而二分圖的最佳匹配則一定為完備匹配,在此基礎上,才要求匹配的邊權值之和最大或最小。二分圖的帶權匹配與最佳匹配不等價,也不互相包含。我們可以使用km演算法實現求二分圖的最佳匹配。方...