歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java垃圾回收和堆內存布局

Java虛擬機是通過垃圾回收的方式進行內存回收的,C/C++可以通過代碼控制內存釋放,防止內存洩露,設置不同的垃圾回收方式和參數都會影響垃圾回收的效果,而這對系統的穩定性及單機的支撐能力方面。

jvm指令集裡面沒有提供垃圾回收的釋放操作,所以不能直接釋放內存,而要專門的垃圾回收器來完成垃圾回收的工作。

不同的垃圾回收器產品有不同的回收策略,先來看Oracle Hotspot JVM中內存的對布局,如圖3.2

從上圖可以看出,有三大區域Young/Tenured/Perm,也就是我們經常說的新生代/老年代/持久代。

一般來說,新的對象被分配到新生代(Young)的Eden區,也有可能被直接分配到老年代(Perm),在進行新生代垃圾回收的時候,Eden區存活的對象被復制到空的Survior區,而下次新生代垃圾回收的時候,Eden區存活的對象和這個Survivor區中存活的對象被復制到另外一個Survivor區,並且清空當前的Survivor區。經過多次的新生代的垃圾回收,還存活的對象被移到老年代,而老年代也會根據一定時間進行呢垃圾回收。

在Hotspot中,針對新生代提供的GC方式:

串行GC:Serial Copying

並行GC:ParNew

並行回收GC:Parallel Scavenge

針對老年代有下面的GC方式:

串行GC:Serial MSC

並行MS GC:Parallel MSC

並行 GC:Compacting GC - Parallel Compacting

並發GC - CMS

在Sun的Java6 update14中,引入了Garbage First(G1)回收器,G1的目標是取代CMS。

Copyright © Linux教程網 All Rights Reserved