堆空间常用参数设置

查看所有参数的默认初始值:-XX:PrintFlagsInitial
查看所有参数的最终值:-XX:+PrintFlagsFinal
堆初始大小: -Xms
堆最大大小: -Xmx 或 -XX:MaxHeapSize=size
新生代大小: -Xmn 或 (-XX:NewSize=size + -XX:MaxNewSize=size )
配置新生代与老年代在堆结构的占比:-XX:NewRatio
设置新生代中Eden和s0/s1空间的比列:-XX:SurvivorRatio
设置新生代垃圾的最大年龄:-XX:MaxTenuringThreshould

幸存区比例 -XX:SurvivorRatio=ratio
晋升阈值 -XX:MaxTenuringThreshold=threshold
晋升详情 -XX:+PrintTenuringDistribution
输出详细的GC处理日志: -XX:+PrintGCDetails

  • 打印简要信息:1 :-XX:+PrintGC 2:verbose:gc
    FullGC 前 MinorGC -XX:+ScavengeBeforeFullGC

当堆空间溢出时在当前项目目录下面生成一个heapdump快照文件:-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
在这里插入图片描述

演示内存的分配策略


/**
 *  演示内存的分配策略
 */
public class Demo2_1 {
    
    
    private static final int _512KB = 512 * 1024;
    private static final int _1MB = 1024 * 1024;
    private static final int _6MB = 6 * 1024 * 1024;
    private static final int _7MB = 7 * 1024 * 1024;
    private static final int _8MB = 8 * 1024 * 1024;

    // -Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc -XX:-ScavengeBeforeFullGC
    public static void main(String[] args) throws InterruptedException {
    
    
        new Thread(() -> {
    
    
            ArrayList<byte[]> list = new ArrayList<>();
            list.add(new byte[_8MB]);
            list.add(new byte[_6MB]);
        }).start();

        System.out.println("sleep....");
        Thread.sleep(1000L);
    }
}

在这里插入图片描述
当占用内存超过eden区内存大小时会触发一次GC,经过多次回收后还存活的对象会转移到老年代去,如果对象很大,eden区都装不下,GC都不用触发,直接转移到老年代

猜你喜欢

转载自blog.csdn.net/u014496893/article/details/114606891