jvm诊断与优化(7)

jvm诊断与优化(7)_第1张图片

    当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,不指定

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诊断与优化(7))