GCRoot與safePoint


HotSpot虛擬機(jī)使用可達(dá)性分析算法確定對(duì)象是否可以被GC。

可達(dá)性分析算法從一系列GCRoot對(duì)象開(kāi)始苫幢,向下搜索引用鏈访诱,如果一個(gè)對(duì)象沒(méi)有與任何GCRoot對(duì)象關(guān)聯(lián),這個(gè)對(duì)象就會(huì)被判定為可回收對(duì)象韩肝。

GCRoot包括以下對(duì)象:

  1. 虛擬機(jī)棧上的本地變量表引用的對(duì)象
  2. 方法區(qū)中類的靜態(tài)屬性引用的對(duì)象
  3. 方法區(qū)中常量引用的對(duì)象
  4. 本地方法棧中JNI引用的對(duì)象

這一過(guò)程稱為根節(jié)點(diǎn)枚舉触菜,也就是垃圾回收中的標(biāo)記過(guò)程,當(dāng)前所有的垃圾收集器哀峻,在標(biāo)記階段都必須停止所有java執(zhí)行線程(stop the world)涡相,以保證對(duì)象引用狀態(tài)不會(huì)發(fā)生變化。

HotSpot虛擬機(jī)作為準(zhǔn)確式虛擬機(jī)剩蟀,維護(hù)了一個(gè)專門的映射表(OopMap)記錄哪些位置存放著對(duì)象引用催蝗,來(lái)快速完成根節(jié)點(diǎn)枚舉過(guò)程。

為每一個(gè)操作記錄OopMap不現(xiàn)實(shí)育特,HotSpot虛擬機(jī)引入了safePoint丙号。

safePoint是程序中的某些位置,線程執(zhí)行到這些位置時(shí)且预,線程中的某些狀態(tài)是確定的槽袄,在safePoint可以記錄OopMap信息,線程在safePoint停頓锋谐,虛擬機(jī)進(jìn)行GC。

線程停頓方式有兩種截酷,搶先式中斷和主動(dòng)式中斷:

  1. 搶先式中斷:虛擬機(jī)需要GC時(shí)涮拗,中斷所有線程,讓沒(méi)有到達(dá)safePoint的線程繼續(xù)執(zhí)行至saftPoint并中斷
  2. 主動(dòng)式中斷:虛擬機(jī)不直接中斷線程迂苛,而是在內(nèi)存中設(shè)置標(biāo)志位三热,線程檢查到標(biāo)志位被設(shè)置,運(yùn)行至saftPoint時(shí)主動(dòng)中斷

safePoint一般出現(xiàn)在以下位置:

  1. 循環(huán)體的結(jié)尾
  2. 方法返回前
  3. 調(diào)用方法的call之后
  4. 拋出異常的位置

這些位置保證線程不會(huì)長(zhǎng)時(shí)間運(yùn)行而無(wú)法到達(dá)safePoint三幻,避免其他線程都停頓等待本線程就漾。

safePoint無(wú)法解決線程未達(dá)到safePoint并處于休眠或等待狀態(tài)的情況,此時(shí)引入safeRegion的概念念搬。

safeRegion是代碼中的一塊區(qū)域或線程的狀態(tài)抑堡,在safeRegion中摆出,線程執(zhí)行與否不會(huì)影響對(duì)象引用的狀態(tài)。線程進(jìn)入safeRegion會(huì)給自己加標(biāo)記首妖,告訴虛擬機(jī)可以進(jìn)行GC偎漫;線程準(zhǔn)備離開(kāi)safeRegion前會(huì)詢問(wèn)虛擬機(jī)GC是否完成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末有缆,一起剝皮案震驚了整個(gè)濱河市象踊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棚壁,老刑警劉巖杯矩,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異袖外,居然都是意外死亡史隆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門在刺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逆害,“玉大人,你說(shuō)我怎么就攤上這事蚣驼∑悄唬” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵颖杏,是天一觀的道長(zhǎng)纯陨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)留储,這世上最難降的妖魔是什么翼抠? 我笑而不...
    開(kāi)封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮获讳,結(jié)果婚禮上阴颖,老公的妹妹穿的比我還像新娘。我一直安慰自己丐膝,他們只是感情好量愧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帅矗,像睡著了一般偎肃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浑此,一...
    開(kāi)封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天累颂,我揣著相機(jī)與錄音,去河邊找鬼凛俱。 笑死紊馏,一個(gè)胖子當(dāng)著我的面吹牛料饥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘦棋,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼稀火,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赌朋?” 一聲冷哼從身側(cè)響起凰狞,我...
    開(kāi)封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沛慢,沒(méi)想到半個(gè)月后赡若,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡团甲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年逾冬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躺苦。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡身腻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匹厘,到底是詐尸還是另有隱情嘀趟,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布愈诚,位于F島的核電站她按,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏炕柔。R本人自食惡果不足惜酌泰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匕累。 院中可真熱鬧陵刹,春花似錦、人聲如沸欢嘿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)际插。三九已至,卻和暖如春显设,著一層夾襖步出監(jiān)牢的瞬間框弛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工捕捂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瑟枫,地道東北人斗搞。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像慷妙,于是被迫代替她去往敵國(guó)和親僻焚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容