垃圾回收——概述
我們之前對Java虛擬機器已經有了一定的瞭解,而且,對Java虛擬機器的記憶體結構以及物件,都有了一定的瞭解之後,我們來看垃圾回收,我們在寫Java應用的時候,記憶體都是由Java虛擬機器來進行管理的,不管是申請記憶體也好,還是釋放記憶體也好,都不需要我們程式設計師來進行處理,Java虛擬機器就給我們處理完畢了,那麼,我們在一般情況下來進行開發的過程中,我們是不需要關注這一塊內容的,但是,話又說回來,如果我們遇到了一些問題,比如說在高併發環境下,出現了瓶頸的時候,我們就需要去找,來進行優化,那麼,Java虛擬機器的垃圾回收就是我們優化的一個非常重要的地方,那麼,從本節課開始,我們就深入的瞭解一下所謂的垃圾回收。
我們看到垃圾回收這四個字,我們就能夠提出來這幾個問題,我們的物件什麼時候才會變成垃圾?即如何判定物件為垃圾物件,也就是說,我們回收的物件只有垃圾,我們用到的物件肯定是不能回收的,回收的是不用的物件,也就是所謂的垃圾物件。第二個問題就是,如何回收?其實我們在處理垃圾回收的時候,其實主要的就是這兩個問題,當然了,除了這兩個問題之外,還有一個非常關鍵的,也是影響效能的,也是會在高併發環境下經常會造成我們系統瓶頸的問題,就是何時回收?當然,我們重點所要了解的是前兩塊內容
如何判定物件為垃圾物件呢?我們這裡主要講解兩種方法,引用計數法和可達性分析法。這是兩種判斷物件是否為垃圾物件的兩種常見的演算法。
如何回收?這裡我們重點講兩個,回收的策略和常見的垃圾回收器。
那麼,回收策略都有哪些呢?這裡我們會重點的講解四個,第一個是標記-清楚演算法,第二個是複製演算法,第三個是標記-整理演算法,第四個是比較智慧的,我們之前也提到過,叫做分代收集演算法。
垃圾回收器我們也會介紹幾個比較主流的,比如說,Serial垃圾回收器、Parnew垃圾回收器、比較有名的Cms垃圾回收器、還有特別有名的,我們也會重點講的,叫做G1垃圾回收器。