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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

垃圾回收机制之标记清除算法

發布時間:2024/4/13 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垃圾回收机制之标记清除算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個時候我來講一下垃圾回收策略,主要分為這幾種1. 標記清除算法就相當于給一個對象做一個標記,怎么做標記呢,其實是這樣做標記的,比如舉個例子,這個地方假如是堆內存,比如你創建一個對象的時候,User user = new User();你拿到user對象的時候,這個時候是存活的,會起一個標記,那這邊怎么做標記呢,0標識為存活,1標識為沒有存活的,比如這個時候我的垃圾回收機制回收的時候,這個對象已經被應用的情況下,這個時候是為0還是為1呢比如我垃圾回收機制進行回收的時候,發現你這個user對象已經被別人引用了,這個時候應該標識為0還是標識為1,是不是應該標識為0是不是這樣的,那這個時候垃圾回收機制會不會進行回收,不會進行回收,這個很好理解的,如果回收機制發現你沒有被回收的情況下,這個時候是標記為0還是標識為1,如果對象沒有引用就標記為1,這個時候講一下,他有一個很大的bug,為什么有一個bug呢,叫做碎片化,就是標記清除算法會產生碎片化,這個什么意思啊,待會我給你詳細講一下原理,假設我們現在創建兩個對象,叫做user1,user2,這個時候他們都是為存活的,標識都是為0的,都為0的情況下,我寫偽代碼,這個時候我再來一個user3,user3也是存活的,也是為0,那么我們依次類推,后面還有很多很多,一直到1萬多個的時候,那我都是標記為0,如果這個時候發現1萬個對象,發現都沒有被使用的情況下,那這個時候標識都會改成1,那這個時候我的垃圾回收標識變成1的時候,垃圾回收機制遍歷堆內存中不可達對象,進行清理,遍歷不可達對象,進行清理,清理過程有一個缺點,產生碎片化,因為內存不夠連貫,在這邊我舉個例子,在這邊我建一個文件夾,進行模擬,標記清除算法,比如我現在建一個文件夾叫做user,比如這個時候我們來了一個對象,在堆內存中我們創建一個對象,叫做user0,再來一個對象,叫做user1,這個時候我們又來一個對象,叫做user3,后面依次類推我就不寫了,為什么會產生碎片化呢,如果你們這樣刪除的,因為不是一起刪除的,效率不高,他一個個的去進行刪除,這樣的話很容易產生碎片化,我們如果打開文件夾的時候,一起全選,是這樣刪除塊還是一個個的刪除快,你一個個刪除可能就會產生碎片化,會產生刪不干凈的問題,是不是這樣的,所以就是不連貫,就是因為標記清除法不夠連貫,所以就會產生碎片化的問題,這就叫做標記清除算法,這個你們里不理解,理不理解碎片化的問題,這個不繞的,我已經描述的非常清楚了,你們就可以理解為文件夾的意思,我是全部刪除文件夾呢,還是一個個刪除快呢,肯定是全部刪除快,我全部刪除的話很干凈,而且不會刪除碎片化,如果我一個刪除的情況下,效率就不高,而且會產生磁盤碎片化的問題,我們講一下標記清除算法的應用場景在什么地方,是在哪個年代,一般是在老年代,新生代里面一般不會用到這個算法,因為效率不夠高,只會在一些老年代里面,為什么老年代適合這種算法呢,因為老年代回收的次數就不夠多,你不能在新生代里面用這個算法,因為效率不高,因為新生代需要頻繁去回收的情況下,你如果這樣做的話,把速度減慢了,標記清除算法一般是用在老年代里面的,標記清除算法就講完了,標記清除算法可以解決循環依賴的問題

2. 復制算法3. 標記壓縮算法4. 分代算法

?

總結

以上是生活随笔為你收集整理的垃圾回收机制之标记清除算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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