Java虛擬機自動內存管理

生活規律告訴我們,在享受便利的同時一般都會付出巨大的代價,如果你在享受了便利的同時,還沒有爲此付出代價,不是說明沒有,只是還沒到付出的時候。試問,有哪個Java系統架構師不懂Java虛擬機?縱觀Java程序員的發展歷程,又有多少人是卡在了Java虛擬機之上。所以如果你還沒有感覺到爲此付出代價,說明你已經Java虛擬機的糖衣炮彈所擊中,且被毒害之深。Java的自動內存管理就是這樣,像毒藥一樣,一旦上癮就很難戒掉,而且會沉迷於此。而正確的做法就是了解其原理,拿到尚方寶劍,當虛擬機不好好爲你提供服務時,拿出寶劍,以便立刻制服他。而此尚方寶劍的鍛造需要經歷巨大磨難,唯以毅力堅定者方能鑄成。


Java的內存管理主要兩部分,一部分是Java的內存分配,另外一部分是內存的回收。對於這部分內容的瞭解,首先必須瞭解清楚Java虛擬機的內存結構。如果對內存結構不熟悉的朋友可以看關於Java虛擬機的內存結構這篇文章。我們知道內存可以分爲5大塊區域,從自動內存管理的角度,線程獨佔區的內存是比較容易進行管理的,線程創建就要分配這些區域,線程的銷燬這些區域也就釋放了,因此我們這裏主要討論的主要是關於堆內存和方法區內存的管理。在之前的文章中也提到了虛擬機規範中並沒有對方法區這塊內存做太多的限制,而且是作爲堆內存的一個邏輯部分。下面就分別從內存的分配與內存的回收兩個方面來了解Java虛擬機的內存管理。


內存分配,內存的分配相比較內存的回收要簡單一些,一般有幾個原則:

     1.對象首先在Eden區域分配。

     2.大對象直接進入到老年代。

     3.多次存活的對象分配到老年代中。

     4.內存分配擔保。

     5.逃逸分析與棧上分配。


內存回收,這部分涉及的內容就比較多了,首先是內存回收所用到的算法,比如標記對象爲垃圾對象的引用計數法以及可達性分析法。在比如垃圾收集算法標記清除算法,複製算法,標記整理算法以及分代收集算法等等。這些理論知識積累了之後就到垃圾收集器,垃圾收集器是執行垃圾回收的具體實現,垃圾收集器有很多,不同的垃圾收集器的適用場景不同,關注點也不同,在不同的環境下選擇合適的垃圾收集器並指定合適的參數是一個系統架構師必備的能力。這樣對於內存的回收就達到標準了。總結一下主要的內容

     0.垃圾對象判斷算法

     1.垃圾回收算法

     2.垃圾收集器


好了,到這裏關於java內存管理所需要知識點就都列到這裏了,如果你對Java的自動內存管理比較感興趣,可以觀看《深入理解Java虛擬機》這套視頻,這裏詳細的講解了上面的所有的知識點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章