日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jvm-垃圾回收随时都可以STW吗?带你认识安全点和安全区域

發布時間:2025/3/19 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jvm-垃圾回收随时都可以STW吗?带你认识安全点和安全区域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

安全點

如何在GC發生時,檢查所有線程都跑到最近的安全點停頓下來呢?

安全區域(Safe?Region)

實際執行時


安全點

1.程序執行時并非在所有地方都能停頓下來開始GC,只有在特定的位置才能停頓下來開始GC,這些位置稱為“安全點(Safepoint)”。

2.Safe?Point的選擇很重要,如果太少可能導致GC等待的時間太長,如果太頻繁可能導致運行時的性能問題。大部分指令的執行時間都非常短暫,通常會根據“是否具有讓程序長時間執行的特征”為標準。比如:選擇一些執行時間較長的指令作為Safe?Point,如方法調用、循環跳轉和異常跳轉等。

如何在GC發生時,檢查所有線程都跑到最近的安全點停頓下來呢?

1.搶先式中斷:(目前沒有虛擬機采用了)

? ? 首先中斷所有線程。如果還有線程不在安全點,就恢復線程,讓線程跑到安全點。

2.主動式中斷:

? ? 設置一個中斷標志,各個線程運行到Safe?Point的時候主動輪訓這個標志,如果中斷標志位真,則將自己進行中斷掛起。

安全區域(Safe?Region)

1.SafePoint機制保證了程序執行時,在不太長的時間內就會遇到可進入GC的SafePoint。但是,程序“不執行”的時候呢?例如線程處于Sleep狀態或Blocked狀態,這時候線程無法響應JVM的中斷請求,“走”到安全點去中斷掛起,JVM也不太可能等待線程被喚醒。對于這種情況,就需要安全區域(Safe?Region)來解決。

2.安全區域是指在一段代碼片段中,對象的引用關系不會發生變化,在這個區域中的任何位置開始GC都是安全的。我們也可以把Safe?Region看作是被擴展了的SafePoint。

實際執行時

1.當線程運行到Safe?Region的代碼時,首先標識已經進入了Safe?Region,如果這段時間內發生GC,JVM會忽略標識為Safe?Region狀態的線程;

2.當線程即將離開Safe?Region時,會檢查JVM是否已經完成GC,如果完成了,則繼續運行,否則線程必須等待直到收到可以安全離開Safe?Region的信號為止。

總結

以上是生活随笔為你收集整理的jvm-垃圾回收随时都可以STW吗?带你认识安全点和安全区域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。