jvm診斷與優化(7)

    當new 一個對象時,該對象首先進入eden(伊甸園,人類初始的住處),在沒有GC觸發時該對象是不會移動的。每當通過一次GC,那麼該對象的年齡就會加1,還有那些不可達的對象就會被銷燬,eden也會被清空。此時對象應該被移動到存活區(s0/s1)中,仍是在年青代的範圍中。並在存活區中不斷爬升它的年齡,當它的年齡達必定值時,該對象就是被移動到老年代中(叫「晉升」),清空s0/s1的對象。
    當轉到大對象,或eden/s0/s1的空間太小,對象就會被直接移動到老年代中。
    -XX:MaxTenuringThresold        //最大晉升年齡,默認15。
        參數說明:當到了這個年齡的對象必定會被移動到老年代中,但未到這個年齡也有可能被移動到老年代中,由jvm自行判斷。
    -XX:TargetSurvivorRatio50        //指當存活區(s0/s1)的使用率到達50%時,不管對象是否到地最大晉升                                                            年齡都會被移動到老年代中
    -XX:PretenureSizeThreshold1024    //指當對象的大小超過1M就會被直接送到老年代中,只在串行與                                                                       ParNew中有效,對於ParallelGC無效。默認0,不指定
java

TLAB區域(Thread Local Allocation Buffer 線程本地分配緩存)
   
這是爲了加速線程對象分配而生的。通常狀況下對象會分配在堆上,而堆是全局共享的。就會發生一時間可能有多個線程在堆上去申請空間,激烈的競爭致使分配效率降低。考慮到對象分配是java最經常使用的操做,所以jvm提供了TLAB來提交分配效率,而TLAB自己佔用了eden空間。 緩存

    -XX:-UseTLAB        //禁用TLAB,這樣會致使性能降低,默認開始。
    -XX:-ResizeTLAB    //禁用自動調整TLAB的大小,默認開啓
    -XX:TLABSize        //手工指定一個TLAB的大小,在禁用自動調整的前提下
    -XX:+PrintTLAB    //查看TLAB的使用狀況
    -XX:TLABRefillWasteFraction64    //指當TLAB空間不足,且當請求分配的對象大小,小於1/64的TLAB                                                                 時建立一個新的TLAB,不然分配到堆中
jvm

相關文章
相關標籤/搜索