記憶體回收行程GC

來源:互聯網
上載者:User

標籤:java中的記憶體回收機制

 java中的記憶體回收機制

    JAVA 的一個重要特點就是有記憶體回收行程,並且能夠自動回收垃圾,這也是java相對與其他語言的有優勢的地方,如C語言就沒有自動回收垃圾的機制。

    java的每一個執行個體對象和數組都是在對堆裡面分配空間的,解譯器具有為類執行個體分配空間的工作能力,在解譯器為一個執行個體分配完儲存空間時,就會記錄該執行個體對象所佔用的記憶體地區的使用,一旦對象使用完畢之後,就會被回收到垃圾中!

    在java語言中,出來new語句外沒有其他方法為一個對象申請和釋放記憶體,對記憶體的釋放和回收的工作是有java運行系統承擔的。在SUN公司開發的java解譯器和Hot java 環境中,片段回收後後台線程回收的方式來執行,這樣子不但為系統提供良好的效能還使我們程式員擺脫了自己控制記憶體使用量的風險。java的自動記憶體回收功能解決了兩個最常見的應用程式錯誤:記憶體外露和無效記憶體的引用。

    清理垃圾資料的重要性常常會被程式員忽視,這是很危險的,這些會導致垃圾佔據系統資源,一直到記憶體耗盡。java提供了一種叫做記憶體回收的機制來避免程式員忽略垃圾的處理,java自動幫我們完成記憶體回收的工作,而不需要程式員再去考慮。

    在java程式啟動並執行時候,一個記憶體回收機器會不定時的被喚醒來檢查是否有不再被用到的對象,並將其回收然後釋放資源(空間),但記憶體回收機制的啟動不受我們程式員的控制,有可能一個程式到運行完時,記憶體回收行程都沒有被啟動。所以這個不是一個很可靠的機制,但這也不是什麼壞事,因為記憶體回收機制會給系統資源帶來額外的負擔。啟動的幾率越小,帶來的額外負擔就越少。

   不同的java虛擬機器採用不同的回收策略:1.複製式 2.自省式

1.複製式:就是將在啟動並執行程式暫停,將正在被使用的所有對象複製到另一個堆記憶體,那些不被使用的記憶體就會被釋放掉。

    這種複製方式需要維護所需記憶體數量的兩倍的記憶體空間,即使你的垃圾很少,也會把堆記憶體的內容複寫到另外一塊堆記憶體中,這使得這種策略的效率低下。


2.自省式:

  自省式回收器會檢測所有正在被使用的對象,然後將其做標記,完成任務後將所有不再被使用的對象所佔據的空間一次釋放。但這樣的方式速度很慢,不過如果程式的垃圾很少的話,這樣的策略就很有優勢了。


所以可以將兩中方法結合起來使用,在一些jvm中兩種方式有機的結合起來運用,在實際應用中,jvm會監督這兩隻模式的運作效率,如果程式中的對象長期被使用,JVM就會轉換到“自省模式”回收模式,而當產生大量垃圾或者對象多佔用的記憶體不連續的情況嚴重的時,又會轉換至“複製式”模式,如此迴圈。實現兩種機制交換。


    


本文出自 “愛吉” 部落格,謝絕轉載!

記憶體回收行程GC

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.