Java 堆內存分配與GC

Java採用分區的方式對堆內存(對象佔用的內存)進行管理,主要分爲兩個區域,新生代以及老年代。

新的對象創建時,將會分配到新生代,但是當發現新生代的內存不足以安置新的對象時,就會對新生代進行一次垃圾回收(Minor GC)。

Minor GC 會將可回收對象回收掉,會將一些達到一定年齡的對象放置到老年代

當Minor GC後,發現內存還不足以安置新對象時,則會將對象直接放入老年代內存,否則直接進入新生代的內存。

假如對象爲大對象,則此對象將會直接進入老年代。

而當老年代的內存不足時,將會對進行一次Full GC(所有垃圾的回收), full gc的效率非常的低,大概是minor gc的幾十倍。


程序應該儘量的避免Full GC, 即儘量的避免大部分對象都進入老年代。避免的方式有兩種。

1. 對象基本都是短命的,即使用完了,即可回收(如,只作用於方法域的對象)

2. 對象不是大對象!!

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