测试发生minorGC的时候,如果不能将所有存活的对象copy到To区域,那么就会将无法放到To区域的对象直接晋升到老年代,而那些可以在To区域放得下的对象还是呆在To区
package org.hujian.jvm.gc;
import org.hujian.common.JvmTestRunner;
/**
* Created on 2018/11/8 17:26.
* JVM Arg:
* -XX:+UseSerialGC -verbose:gc -XX:+PrintGCDetails -Xms200m -Xmx200m -Xmn100m
*/
public class TestNotEnoughSpaceOnToWhileMinorGC extends JvmTestRunner {
/**
* 在这里实现测试逻辑,不提供参数列表以及返回值,执行该方法应该测试到
* 你需要实现的所有逻辑,本方法单线程执行(main)
*/
@Override
protected void execute() {
//testCanCopyTo();
testCannotCopyTo();
}
/**
* 测试可以拷贝到To区域的情况
*
*/
private void testCanCopyTo() {
/// 申请5M大小的对象,这个对象需要存活
b1 = allocMb(5);
/// 接下来试图触发一次minorGC
allocMb(20);
allocMb(20);
allocMb(20);
allocMb(20);
reportData();
}
/**
* 测试无法拷贝到To区域的情况
*
*/
private void testCannotCopyTo() {
/// 测试在minorGC发生的时候,如果存活的对象大小大于to区域的大小,是否会将对象直接晋升到老年代
b1 = allocMb(8);
b2 = allocMb(20);
allocMb(20);
allocMb(20);
allocMb(20);
reportData();
}
public static void main(String[] args) {
new TestNotEnoughSpaceOnToWhileMinorGC().execute();
}
}