垃圾回收机制之标记压缩算法与分代算法
生活随笔
收集整理的這篇文章主要介紹了
垃圾回收机制之标记压缩算法与分代算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標記清除算法其實和標記壓縮算法其實非常相同,標記壓縮算法是在標記清除算法之上,解決內存碎片化的問題,就是刪不干凈的問題,因為他的整個排序不是很好,標記壓縮,有的地方叫做標記整理,都是一個意思,標記壓縮算法其實和標記清除算法雷同,user1假如他是可達的,我們把它標紅,我再給他一個user2,可達的,記住了標紅是可達的,這個時候我再來一個對象,叫做user3,user3標做黑色的是不可達,user2也是可達的,這就是標記清除里面一個比較大的問題,他是對位置是沒有任何排序的,刪的時候會產生碎片化的問題,標記壓縮怎么做我把可達和不可達做一個排序,我把可達對象排到一塊,然后我把不可達對象再排到一塊,我刪的時候我怎么刪呢,直接把不可達對象直接全刪了就行了,這個可以解決碎片化的問題,壓縮算法是把原先的對象做排序,加入user1和user2是進行關聯起來的,user1引用user2的時候,user1和user2會排在一起,如果我再來一個user4,user4對象,假如user4也是黑色的,user4也是和user3放到一塊的,然后user1和user3是放到一塊的,刪除的時候直接把不可達對象直接清理就可以了,這樣的話就不會產生碎片化的問題,產生碎片化是因為什么原因呢,刪的時候可能順序不好,給他做一個排序,以解決碎片化的問題,這個其實是比較簡單的
然后講一個分代算法,分代算法就是把之前的標記清除啊,標記整理啊,還有復制算法,全部都整合在一起了,這就跟你們說一下,這個分代算法給你們講一下,在這個地方會有一個知識點,我還是大體的給大家談一下,Minor GC主要是做新生代回收的分代算法是根據新生代和老年代做了一個算法,比如新生代里面會使用Minor GC,就是這種算法,老年代Major GC 和 Full GC,它是針對老年代的回收,Full GC到底干嘛用的,Full GC也會回收永久區里面的,因為像你們之前的時候,會有一個問題,JVM的永久代會不會發生垃圾回收嗎,我告訴你們,垃圾回收確實不會發生在永久代里面,但是永久代滿的情況下,超出了臨界線,看你的方法區配置了多大的,如果滿了就會觸發Full GC的,在JAVA8的時候,移除了永久代,新加了一個元數據區,叫做native內存區,垃圾回收算法其實是非常基礎的知識
?
總結
以上是生活随笔為你收集整理的垃圾回收机制之标记压缩算法与分代算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 垃圾回收机制之复制算法
- 下一篇: 常见jvm参数配置