某次gc頻繁

2021-08-03 13:10:01 字數 742 閱讀 5545

使用jmap -dump得到檔案,mat分析,大量finalizer物件佔據了主要空間。finalizer物件是實現了finalize()方法的f類,生成例項時一對一生成後,掛在finalizer類的靜態佇列(乙個gcroot)下的。它可以保證在一次gc後,如果finalizer物件對應的f類只有finalizer引用(被靜態佇列引用,無法銷毀),就把該finalizer物件從static佇列移除,並呼叫f類物件的finalize方法。此後該f類物件就沒有引用了,可被gc。

此次finalizer物件中大多包含的是sockssocketimpl物件,經查證該類是網路通訊常用類,其父類複寫了finalizer()方法,執行close()。

使用者大量新建區域性的sockssocketimpl物件,導致生成大量finalizer物件引用了s物件。區域性s物件的使用者引用被很快釋放,但是由於有finalizer物件引用,在下一次gc時,會把這些finalizer物件置入queue中等待清理(從f鍊錶中remove),清理後s物件、finalizer物件才真的沒有引用,可以等待**。使用者不及時close()會導致finalizer物件的清理速度較慢,增加sockssocketimpl和finalizer的**難度。

有經驗表明使用者及時close()會優化大量finalizer在鍊錶中堆積的問題。(這裡有疑問,使用者不close(),是會導致一直持有嗎?還是說會導致finalizer阻塞?因為有經驗表明使用者及時close()會優化大量finalizer堆積的問題)待排查。

此次排查似乎不是s物件的原因。

elasticsearch 頻繁GC問題處理

收到es的告警,在1小時內意外分配了碎片,從而導致集群狀態 green yellow red yellow green 頻繁切換?在此期間,es不可訪問,並且呼叫api開始返回非200的狀態碼。環境 3個主節點和3個工作節點。這種鋸尺模式的原因是,elasticsearch在執行某些操作搜尋查詢,寫...

關於某次面試

某次面試,給我出了這麼乙個題目,要求輸入陣列,輸出字母,規律如下。1對應a 2對應b 依次類推,aa就代表27,要求輸入無限 相對無限 當時我的想法,直接將數字轉換為26進製資料 然後對應陣列中的26個字母。貌似因為這個思路被否決。沒關係,在這裡實現下。php程式碼 程式碼沒做優化提公升。其實可以做...

GC演算法 筆記 GC標記 壓縮演算法

將 gc標記 清除演算法與gc複製演算法相結合。一 lisp2演算法 標記階段結束後進入壓縮階段,壓縮階段縮小被標記節點之間的距離。compaction phase set forwarding ptr adjust ptr move obj 優點 可有效利用堆 缺點 壓縮花費計算成本 二 two ...