java的記憶體回收(譯)

來源:互聯網
上載者:User

標籤:

原文:https://plumbr.eu/handbook/garbage-collection-in-java

  

  一直以來,整理和說明記憶體回收機制一直是一個重要的課題。在實際應用中,需要知道如何修改相應的設定,來滿足實際的需要。

例如,讓我們來看一下JVM(虛擬機器)如何設定,才能保證我們能正確的分配這些資源。

 

片段和壓縮

 

  當JVM記憶體回收時,必須確保足夠的資源可以分配利用。這樣會產生記憶體片段,像磁碟片段一樣,會導致兩個問題:

  *要找到一個足夠的空間,寫操作變的更耗時,它不再是一個簡單的操作

  *當建立一個新的對象,虛擬機器在相鄰的塊分配記憶體。如果片段越來越多,達到某個點,沒有足夠的空閑片段用來建立新的對象,

  一個分配錯誤就會產生。

    

為了避免這樣的問題,虛擬機器必須確保不能片段數量不能超出限制。所以記憶體的清理和釋放的過程也發生在垃圾收集,只是為了替換標記和清除片段。這個過程會把所有可以收集的對象重新分配到一個新的地方,消除片段。下邊是效果的展示圖:

分代假設

  正如我們之前提到的,垃圾收集需要停止所有的應用程式。很明顯,隨之對象的越來越多,垃圾收集的次數也會越來越多。

假如我們只有很小的一塊記憶體空間,研究人員觀察發現,大多數記憶體配置,分為兩大類:

  *大多數對象很快變成無用的

 *還有一種是不會存活很長時間

  

  這些資料值放到一起會變成一種假設,基於這種假設,虛擬機器的記憶體中被分為年輕代和老年代,後者也被稱為年老代

 有許多如何並行和分別清理這些記憶體空間的演算法, 為了改善記憶體回收的效能,已經做了很長時間的嘗試。

 

 並不是說有一個沒有問題的方法,例如,來自不同代的對象間的相互引用,在垃圾回如何去計算,和收集這個代的資料

 

值得注意的是,這些假設對一些應用程式並不成立。因為記憶體回收的演算法已經最佳化了消失殆盡的年輕代或者可能存活的年老代,

虛擬機器會使快被收集的對象擁有期望的生命週期。

 

記憶體池

未完。。。。

java的記憶體回收(譯)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.