91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是三色標記

發布時間:2021-10-12 16:13:34 來源:億速云 閱讀:418 作者:iii 欄目:編程語言

本篇內容介紹了“什么是三色標記”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

【1】關于三色標記

前幾天,公司臨時派我去面試一個java實習生,由于沒有這方面的任何經驗,于是一不小心,我就問超綱了。

問過了java基礎,我隨口又問了一句,知道三色標記嗎?

他顯然是懵逼了一瞬間,但也僅僅一瞬間,然后振振有詞地反問,是紅黃藍三色標記嗎?

這倒是反把我問住了。

面試有問題答不出來,這其實可以理解,不懂就說不懂,不會就說不會,子曾經曰過,知之為知之。

三色標記,正經來說,就只有黑白灰三個顏色。

但實際上,三色標記,和顏色其實沒有任何關系,只與一次掃描狀態相關

  • 黑色節點,代表根節點或者已掃描完的節點,該節點的子節點也被掃描完;

  • 灰色節點,代表已掃描完的節點,該節點的子節點存在未被掃描的情況;

  • 白色節點,代表未被掃描的節點。

什么是三色標記

上圖中,A就是黑色節點,B為灰色,因為B的子節點C未被掃描,C則是白色節點。

如果,掃描結束,C依舊是白色,則C被回收。

但這里會存在一個問題,如果在上圖的情況下,BC的引用斷掉,而AC的引用被建立,如下圖:

什么是三色標記

則會出現以下情況:

  • B掃描完,無引用,變黑。

  • C,按道理說,也會變灰,然后變黑。

  • 但A此時已經是黑色節點,則不會掃描其引用,所以C不會被掃描,還是白色。

  • 最后,C會被當垃圾回收。

這顯然是一個誤操作,因為C當前是根可達的,那該問題怎么辦呢?

常用的垃圾回收器,CMS和G1都給出了解決方案。

CMS的方法叫做Incremental Update算法。

該算法從結果入手,判斷掃描完結時,是否有白色對象被黑色對象引用,如果被引用,則通過write barrier寫屏障技術,把黑色的對象重新標記為灰色,然后重新掃描。

什么是三色標記

G1的方法叫做SATB算法。

該算法從源頭入手,GC開始之前拍攝快照,設定所有存在引用的對象,都是存活的。

GC掃描之后,再次拍攝快照,將新引用的存活對象標記。

然后將快照疊加。

什么是三色標記

這樣,C顯示的是被A,B兩個對象引用。

但這樣會有一個弊端,如果此時,AC之間的引用沒有被建立,則C本來應該被回收,但此輪卻并沒有被回收。

【2】跨代引用的問題

跨代引用這個概念被提出來的時候,很多人都有似曾相識的感覺。但具體要說,很多人就說不出所以然來了。

其實,java堆說到底就兩個代(年輕代和老年代),持久代在jdk的某個版本后,就被放到本地方法棧了。

跨代引用,即父節點在一個代,而引用對象在另一個代。

一般來說,父節點都在老年代,引用對象在年輕代。

什么是三色標記

如上圖,X引用和Y引用都是屬于跨代引用。

跨代引用一般多發生在G1回收器中,因為G1的內存采用分塊的模式,內存區域不穩定

那么,年輕代回收(young GC)時,是否要根據可達性分析,遍歷所有的老年代關聯,直到根節點呢。

不需要。

只要父節點在老年代,則一律視為根節點。

在這里(跨代引用)要引入兩個概念,結果集和卡表。卡表可以看作一個老年代分區的集合或者數組,如下圖。

什么是三色標記

結果集,就是一組類似于map的容器,key存放卡表的下標,value存放引用關系

什么是三色標記

想想這樣做的好處是什么?

【3】安全點和安全區域

java工作線程和垃圾回收線程,一般情況下,是不能同時進行的。

通常老師講到這個問題的時候,會打個比方:吃飯和洗碗擦桌子。

之所以工作線程和垃圾回收線程不能同時進行,是因為人不能一邊吃飯一邊收拾碗筷(觸手怪除外)。

同理,還有一個問題,你也不能把飯吃到一半,把碗拿過去洗。

所以,你必須在吃完飯的時候,洗碗。

吃完飯的這個時間,就是安全點。

一般來說,安全點是某個線程的結束或者中斷的時間,可以是方法調用,循環跳轉,異常跳轉等。

再回頭說說垃圾回收的全過程。

  • 業務線程執行過程中,會不斷輪詢一個標志位,該標志位處于垃圾回收線程中;

  • 如果需要做垃圾回收,回收線程會將標志位改掉;

  • 業務線程收到標志位信息,會走到安全點,然后停止;

  • 垃圾回收線程啟動,回收垃圾。

什么是三色標記

那么,安全區域是什么呢?

一個區域所有的點都是安全點,這一部分就是安全區域。

還是拿原來那個例子,如果你晚上減肥,不想吃飯,碗什么的,隨時都可以洗。

【4】如何查看GC日志

直接上命令:-XX+PrintGCDetails。

該命令可以在控制臺打印GC日志。

日志內容如下:

什么是三色標記

【5】終:垃圾回收各指標

吞吐量:指在應用程序的生命周期內,應用程序所花費的時間和系統總運行時間的比值。

公式:吞吐量=系統應用時間/系統總運行時間

垃圾回收器負載:和吞吐量正好相反,垃圾回收器負載指垃圾回收器耗時與系統運行總時間的比值。

公式:吞吐量=垃圾回收時間/系統總運行時間

停頓時間(延遲):指垃圾回收器正在運行時,應用程序的暫停時間。

PS:獨占回收器延遲長,但吞吐量高,并發回收器,延遲少,但吞吐量低。

垃圾回收頻率:指垃圾回收器多長時間會運行一次。

PS:垃圾回收器的頻率應該是越低越好。

反應時間:指當一個對象被稱為垃圾后多長時間內,它所占據的內存空間會被釋放。

PS:即垃圾回收的周期

over~~

堆分配:不同的垃圾回收器對堆內存的分配方式可能是不同的。一個良好的垃圾收集器應該有一個合理的堆內存區間劃分。

“什么是三色標記”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高雄市| 白河县| 东辽县| 阳信县| 娄烦县| 峨山| 博客| 陵水| 嫩江县| 那坡县| 武穴市| 开封市| 滦南县| 昔阳县| 安西县| 福泉市| 长岛县| 友谊县| 历史| 甘洛县| 夏津县| 香格里拉县| 莱西市| 吴忠市| 合肥市| 淅川县| 孝感市| 和平县| 竹溪县| 珠海市| 禹州市| 海盐县| 海安县| 读书| 中宁县| 南岸区| 自治县| 纳雍县| 沅江市| 安图县| 泽普县|