少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
          Java堆,分配對象實(shí)例所在空間,是GC的主要對象。分為
           新生代(Young Generation/New)
           老年代(Tenured Generation/Old)
          新生代又劃分成
           Eden Space
           From Survivor/Survivor 0
           To Survivor/Survivor 1
          新生代要如此劃分是因為新生代使用的GC算法是復(fù)制收集算法。這種算法效率較高,而GC主要是發(fā)生在對象經(jīng)常消亡的新生代,因此新生代適合使用這種復(fù)制收集算法。由于有一個假設(shè):在一次新生代的GC(Minor GC)后大部分的對象占用的內(nèi)存都會被回收,因此留存的放置GC后仍然活的對象的空間就比較小了。這個留存的空間就是Survivor space:From Survivor或To Survivor。這兩個Survivor空間是一樣大小的。例如,新生代大小是10M(Xmn10M),那么缺省情況下(-XX:SurvivorRatio=8),Eden Space 是8M,F(xiàn)rom和To都是1M。
          在new一個對象時,先在Eden Space上分配,如果Eden Space空間不夠就要做一次Minor GC。Minor GC后,要把Eden和From中仍然活著的對象們復(fù)制到To空間中去。如果To空間不能容納Minor GC后活著的某個對象,那么該對象就被promote到老年代空間。從Eden空間被復(fù)制到To空間的對象就有了age=1。此age=1的對象如果在下一次的Minor GC后仍然存活,它還會被復(fù)制到另一個Survivor空間(如果認(rèn)為From和To是固定的,就是又從To回到了From空間),而它的age=2。如此反復(fù),如果age大于某個閾值(-XX:MaxTenuringThreshold=n),那個該對象就也可以promote到老年代了。
          如果Survivor空間中相同age(例如,age=5)對象的總和大于等于Survivor空間的一半,那么age>=5的對象在下一次Minor GC后就可以直接promote到老年代,而不用等到age增長到閾值。
          在做Minor GC時,只對新生代做回收,不會回收老年代。即使老年代的對象無人索引也將仍然存活,直到下一次Full GC。
          posted on 2013-05-28 14:31 abin 閱讀(455) 評論(0)  編輯  收藏 所屬分類: JVM
          主站蜘蛛池模板: 九龙县| 泾阳县| 太湖县| 辽阳县| 仪征市| 元朗区| 香格里拉县| 固镇县| 乌恰县| 祁门县| 岳阳县| 佛坪县| 湟源县| 高阳县| 南宫市| 永嘉县| 阜阳市| 枣强县| 上思县| 武陟县| 从江县| 湘乡市| 桓台县| 交口县| 平原县| 丹东市| 遂宁市| 凭祥市| 沿河| 信宜市| 屏南县| 刚察县| 福清市| 灵宝市| 南溪县| 加查县| 甘孜| 房产| 赤壁市| 伊宁市| 南投市|