java 测试对象动态判断是否需要晋升到老年代

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 测试对象动态判断是否需要晋升到老年代相关的知识,希望对你有一定的参考价值。

package org.hujian.jvm.gc;

import org.hujian.common.JvmTestRunner;

/**
 * Created on 2018/11/8 18:22.
 *
 * 并不是对象年龄只有到达设定的阈值才能晋升到老年代,如果在survivor空间
 * 中相同age的对象所有空间之和大于survivor空间的一半的话,年龄大于或者
 * 等于该age的对象将可以直接晋升到老年代,无须等待年龄到达 -XX:MaxTenuringThreshold 设定的阈值
 *
 * JVM Arg:
 *  -XX:+UseSerialGC -verbose:gc -XX:+PrintGCDetails -Xms200m -Xmx200m -Xmn100m
 */
public class TestDynamicAgeCheck extends JvmTestRunner {
    /**
     * 在这里实现测试逻辑,不提供参数列表以及返回值,执行该方法应该测试到
     * 你需要实现的所有逻辑,本方法单线程执行(main)
     */
    @Override
    protected void execute() {
        //test1();
        test2();
    }

    /**
     *  使得超过survivor一半空间的对象存活
     *
     */
    private void test1() {
        /// 创建一些对象,让这些对象存活着不去大于survivor空间的一半,看看是否晋升到了老年代
        b1 = allocMb(2);
        b2 = allocMb(2);
        b3 = allocMb(2);

        /// 试图触发一次minorGC
        allocMb(70);

        /// 再触发一次minorGC
        allocMb(70);


        reportData();
    }

    /**
     *  使得不超过survivor一半空间的对象存活
     *
     */
    private void test2() {
        /// 创建一些对象,让这些对象存活着不去,小于survivor空间的一半,看看是否晋升到了老年代
        b1 = allocMb(2);
        b2 = allocMb(2);

        /// 试图触发一次minorGC
        allocMb(70);

        /// 再触发一次minorGC
        allocMb(70);


        reportData();
    }

    public static void main(String[] args) {
        new TestDynamicAgeCheck().execute();
    }
}

以上是关于java 测试对象动态判断是否需要晋升到老年代的主要内容,如果未能解决你的问题,请参考以下文章

java 测试长期存活的对象将晋升到老年代

java对象从新生代晋升到老年代的四种方式

java对象从新生代晋升到老年代的四种方式

java 测试发生minorGC的时候,如果不能将所有存活的对象拷贝到要区域,那么就会将无法放到为了区域的对象直接晋升到老年代,而那些可以在为区域放得下的对象还是呆在要区

GC新生代对象晋升到老年代情况总结

收藏: