????????安全點是JVM要準備進行垃圾回收時,選定一些特定的位置,當應用程序線程執行到這些位置時,安全的先暫停下來,以便JVM執行GC線程進行垃圾回收。
????????JVM在字節碼指令中會選取一些指令作為安全點,安全點的選取一般是循環結束、方法調用前后、異常跳轉等指令位置。
????????如果線程長時間無法到達安全點,如線程處于sleep休眠或blocked阻塞狀態,為了處理這種情況,JVM引入了安全區域的概念,安全區域是指在一段代碼片段中,引用關系不會發生改變,因此只要線程處在這個區域中,外部如果要進行垃圾回收它都是安全的。當應用程序線程進入安全區域時,會標識自己已經進入了安全區域,這樣GC線程就不用考慮我了,我不會給你造成任何麻煩,當此線程要離開安全區域時,會檢查GC垃圾回收是否已經完成,如果完成了,則繼續向下執行,否則,就必須等待,直到收到可以離開安全區域的信號為止。