面試後學習 Java GC機制

2021-08-02 12:43:17 字數 1055 閱讀 8645

①. 計數法

每個物件例項化的時候count 就加一, 刪除物件引用的時候減一,這個方法的有點就是速度很快,但是這個方法有個問題。

比如:

class a

class b

a clazza = new a();

b clazzb = new b();

clazza.b=clazzb;

clazzb.a=clazza;

//即使把clazza 和clazzb都設定成null,他們的計數也不是0, 因為就不能被**

clazza=null;

clazzb=null;

②. tracing

從gc root 物件開始查詢引用,找到後繼續查詢當前引用的其他引用,如此迴圈就構成了乙個圖,沒在圖中的就是下次要**的潛在物件。真正決定物件死亡需要2次標記。

gc root物件:

①. mark - sweep

標記-清除演算法,首先標記有reference的物件,沒有標記的就是**物件,需要清除。

缺點:效率問題, 空間問題(產生好多不聯絡的碎片)

②. copying

把堆記憶體分成2分,每次gc, 把一塊記憶體的存活的物件複製到另一塊,然後清空這一塊記憶體,這個可以利用的空間減少了一半。

③. mark compact

把標記存活的物件,放到記憶體開始的一端,然後清理邊界外的物件

④. generational gc

按物件的存活週期把記憶體分成幾塊,young generation, old generation, young generation 中把記憶體分成較大的eden空間, 和2個較小的survivor空間,新生產的物件放到eden空間,當eden 滿了的時候,gc把存活的物件移動到第乙個survivor,並把eden清空,第二次gc的時候把第乙個eden,survivor空間的存活物件移動到第二個surivivor空間, 並把其他清空,並把從第乙個survivor移動的物件的age加1, 下一次再把第二個survivor空間的物件移動到第乙個survivor,如此迴圈,等age 到了一定值就會把物件移動到old generation.

今後學習計畫

2014年 尤為重要的一年。年齡問題,行業發展階段問題,注定了這是不平凡的一年。一直在關注自己感興趣的技術,按自己本性的方式處理和思考問題,不知不覺中年紀已經不小了。興趣 技術漸漸的看的淡了,開始思考 事業 二字。以下幾個基本點是未來規劃時間時需要注意和思考的 1.軟體設計能力 包括軟體架構和問題的...

學習紅黑樹後學習記錄

紅黑樹用於解決二叉搜尋樹查詢時的最壞時間複雜度達到o n 的情況。有一情形 多次插入新節點導致的不平衡,如下圖所示 在滿足二叉搜尋樹特性的前提下,還需滿足以下5個特點 一 節點非紅即黑。二 根結點是黑色。三 所有null節點稱為葉子節點,且其顏色為黑色。四 所有紅節點的2個子節點都為黑色 換言之,從...

位運算 8皇后學習筆記

與注釋 與講解 結合 void init int row,int ld,int rd else 自己加的一點理解筆記 8皇后是行 列與兩個對角線不能衝突。而逐行進行放置就不需要考慮行的問題,只需逐列考慮列及對角線是否衝突即可。依次放第一行的列,第二行的列,直到第n行的列。圖1,先放第一行第一列,並用...