效能優化|講的最清楚的垃圾回收演算法
效能優化|垃圾回收演算法
標記-清除演算法
標記-清除分為標記和清除兩個階段,在標記階段jvm會在需要回收的物件上面打上標記,標記階段完成後,jvm開始執行清除動作,這個階段會清除掉那些被標記的需要回收的物件。
記憶體整理前後對比:
黑色是存活物件,灰色是垃圾物件
結論:使用標記-清除演算法,清理垃圾後會發現存活物件分佈的位置比較零散,如果有有大物件需要分配的話,很難有連續的空間進行分配;
缺點:效率低、空間碎片
複製演算法
為了解決記憶體碎片問題,jvm大師們研究出了複製演算法,複製演算法的原理是將記憶體空間分為兩塊,當其中一塊記憶體使用完之後,就會將存活物件複製到另外一塊記憶體上,將之前的記憶體塊直接清理掉,這樣就不會產生記憶體碎片的問題了。
使用複製演算法,記憶體前後對比
結論:解決了記憶體碎片的問題,但是會導致記憶體空間縮減一半,適用於存活物件少的區域。
標記整理演算法
標記整理演算法的步驟和標記-清除是一樣的,不過最後多加一步就是整理,用來整理存活物件造成的記憶體碎片,使用標記-整理後記憶體前後對比:
結論:可以看出,執行標記-整理 之後,沒有出現記憶體碎片,所有存活物件被移到了一邊。
分代收集演算法
分代收集演算法主要就是將記憶體分為兩個年代,一個是年輕代,一個是老年代,在年輕代中使用複製演算法,因為年輕代存活的物件少,比較適合使用複製演算法,老年代使用標記整理演算法,因為老年代垃圾比較少,所以適用於標記整理演算法
微信搜一搜【樂哉開講】關注帥氣的我,回覆【乾貨領取】,將會有大量面試資料和架構師必看書籍等你挑選,包括java基礎、java併發、微服務、中介軟體等更多資料等你來取哦。
相關文章
- JVM調優:基本垃圾回收演算法JVM演算法
- JVM 垃圾回收演算法和垃圾回收器JVM演算法
- 垃圾回收(一)【垃圾回收的基礎】
- JVM調優之垃圾定位、垃圾回收演算法、垃圾處理器對比JVM演算法
- 高吞吐低延遲Java應用的垃圾回收優化Java優化
- 每日一問:講講 Java 虛擬機器的垃圾回收Java虛擬機
- JVM垃圾回收演算法JVM演算法
- 【JVM】垃圾回收的四大演算法JVM演算法
- PHP的垃圾回收機制-效能方面考慮的因素PHP
- [效能][JVM]jvm垃圾回收機制JVM
- js垃圾回收的場景最佳化JS
- 淺談垃圾回收演算法演算法
- JVM(九):垃圾回收演算法JVM演算法
- 垃圾回收的標記清除演算法詳解演算法
- 六種主要的垃圾回收演算法和思想演算法
- 垃圾回收(三)【垃圾回收通知】
- 絕對是講的最清楚的-NodeJS模組系統NodeJS
- Kubernetes 中的垃圾回收
- JavaScript 中的垃圾回收JavaScript
- JVM 中的垃圾回收JVM
- 聊聊Dotnet的垃圾回收
- jdk8:垃圾回收演算法JDK演算法
- jvm有哪些垃圾回收演算法JVM演算法
- java垃圾回收有哪些演算法Java演算法
- 垃圾回收的引用計數器演算法詳解演算法
- ☕[JVM技術指南](2)垃圾回收子系統(Garbage Collection System)之常見的垃圾回收演算法JVM演算法
- Java垃圾回收機制詳解及效能最佳化詳解。Java
- 全網最清楚的:MySQL的insert buffer和change buffer 串講MySql
- PHP的垃圾回收機制-回收週期PHP
- 底層原理:垃圾回收演算法是如何設計的演算法
- 垃圾回收演算法:引用計數法演算法
- JVM系列(五) - JVM垃圾回收演算法JVM演算法
- 關於JVM的垃圾回收JVM
- JS的垃圾回收機制JS
- jvm的垃圾回收機制JVM
- JavaScript的垃圾回收機制JavaScript
- PHP的垃圾回收機制PHP
- 垃圾回收