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

相关文章
相关标签/搜索