Hi, 我是Mic,
今天分享一道一線互聯網公司必問的面試題,
”JVM如何判斷一個物件可以被回收“
關于這個問題,來看看普通人和高手的回答,
普通人:
嗯,,,,,,,,,,
高手:
好的,面試官,
在JVM里面,要判斷一個物件是否可以被回收,最重要的是判斷這個物件是否還在被使用,只有沒被使用的物件才能回收,
-
參考計數器,也就是為每一個物件添加一個參考計數器,用來統計指向當前物件的參考次數,
如果當前物件存在應用的更新,那么就對這個參考計數器進行增加,一旦這個參考計數器變成0,就意味著它可以被回收了,
這種方法需要額外的空間來存盤參考計數器,但是它的實作很簡單,而且效率也比較高,

不過主流的JVM都沒有采用這種方式,因為參考計數器在處理一些復雜的回圈參考或者相互依賴的情況時,
可能會出現一些不再使用但是又無法回收的記憶體,造成記憶體泄露的問題,

-
可達性分析,它的主要思想是,首先確定一系列肯定不能回收的物件作為GC root,
比如虛擬機堆疊里面的參考物件、本地方法堆疊參考的物件等,然后以GC ROOT作為起始節點,
從這些節點開始向下搜索,去尋找它的直接和間接參考的物件,當遍歷完之后如果發現有一些物件不可到達,
那么就認為這些物件已經沒有用了,需要被回收,
在垃圾回收的時候,JVM會首先找到所有的GC root,這個程序會暫停所有用戶執行緒,
也就是stop the world,然后再從GC Roots這些根節點向下搜索,可達的物件保留,不可達的就會回收掉,
可達性分析是目前主流JVM使用的演算法,
以上就是我對這個問題的理解,

總結
很多粉絲和我說,很多東西看完以后過一段時間就忘記了,問我是怎么記下來的,
我和他說,技術這些東西不需要記,你唯一能做的就是減少碎片化的學習,多花一點時間在系統學習上,只有體系化的知識是不會忘記的,
可是,搭建體系化知識的程序要比碎片化的點狀學習痛苦不止一萬倍,
技術的沉淀是沒有捷徑的,只能花苦功夫去學習,
喜歡我的作品的小伙伴記得點贊和收藏,
著作權宣告:本博客所有文章除特別宣告外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明來自
Mic帶你學架構!
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力,歡迎關注「跟著Mic學架構」公眾號公眾號獲取更多技術干貨!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482567.html
標籤:其他
上一篇:Python實作一個簡單的自動評論,自動點贊,自動關注腳本
下一篇:SMFL 教程&個人筆記(2)
