1、Java堆
Java堆是和Java應用程序關係最密切的內存空間,幾乎全部的對象都存放在其中,而且Java堆徹底是自動化管理的,經過垃圾回收機制,垃圾對象會自動清理,不須要顯示地釋放。
根據垃圾回收機制不一樣,Java堆有可能擁有不一樣的結構。最爲常見的就是將整個Java堆分爲新生代和老年代。其中新生代存放新生的對象或者年齡不大的對象,老年代則存放老年代對象。html
新生代分爲Eden區,s0區、s1區,s0和s1區也被稱爲from和to區域,他們是兩塊大小相等而且能夠互換角色的空間。算法
當GC發送的時候,若是首先清理的是s0區,把不用的對象清理,把在使用的複製到s1區;若是再次清理的是s1區,一樣的原理。優化
絕大多數狀況下,對象首先是分配在Eden區,再一次新生代回收後,若是對象還存活,則會進入s0或者s1區。以後每通過一次新生代回收,若是對象存活則它的年就加1,當對象達到必定的年齡後,則進入老年代。spa
2、垃圾回收算法:htm
複製算法:其核心思想就是將內存分爲兩快,每次只使用其中一塊,在垃圾回收時,將正在使用的內存中的存留對象複製到未被使用的內存塊中去。以後去清楚以前正在使用的內存塊中全部的對象,反覆去交換兩個內存中的角色,完成垃圾收集。
(Java中新生代的from和to空間就是使用這個算法)。
標記壓縮算法:在標記清除法基礎之上作了優化,把存活的對象壓縮到內存一端,然後進行垃圾清(Java中老年代使用的就是標記壓縮算法)。
3、相關參數的詳細配置
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html對象