内存回收与分配策略

  1. 对象优先分配Eden与分配担保机制
public class Test {
    private static final int _1MB = 1024 * 1024;
    /**
     * VM 参数: -Xms:20M -Xmx:20M -Xmn:10M
     */
    public static void testAllocation(){
        //分配 A 到 Eden 2Mb 剩余6Mb
        byte[] A = new byte[2 * _1MB];
        //分配 B 到 Eden 2Mb 剩余 4Mb
        byte[] B = new byte[2  * _1MB];
        //分配 C 到 Eden 2Mb 剩余2Mb
        byte[] C = new byte[2 * _1MB];
        //分配D对象到Eden 4Mb 发现Eden 剩余空间不足,触发Minor GC—>
        // 发现A/B/C都存活 复制A/B/C到Survivor区->
        // A/B/C都比Survivor大 触发分配担保机制->
        //A/B/C 都进入Old区 Eden 清理内存 剩余 8Mb->
        //D对象放入Eden区
        byte[] D = new byte[4 * _1MB];
    }
}

在这里插入图片描述
2. 大对象直接进入老年代

 /**
     * VM 参数: -Xms:20M -Xmx:20M -Xmn:10M -XX:PretenureSizeThreshold:3145728
     */
    public static void testPretenureSizeThreshold(){
        //分配 A 到 Eden 4Mb 超过设定阈值3Mb 触发大对象直接进入老年代机制->
        //分配A 到 Old区
        byte[] A = new byte[4 * _1MB];
        
    }

在这里插入图片描述

3.对象年龄判定

 /**
     * VM 参数: -Xms:20M -Xmx:20M -Xmn:10M -XX:PretenureSizeThreshold:3145728
     */
    public static void testPretenureSizeThreshold(){
        //分配 A 到 Eden 0.25Mb
        //分配A 到 Eden
        byte[] A = new byte[1/4 * _1MB];
        while (true){
            byte[] B = new byte[1/4*_1MB];
            B = null;
        }
    }

在这里插入图片描述

4.动态对象年龄判定

 /**
     * VM 参数: -Xms:20M -Xmx:20M -Xmn:10M -XX:MaxTenuringThreshold=15
     */
    public static void testPretenureSizeThreshold(){
        //分配 A 到 Eden 0.25Mb
        byte[] A = new byte[1/4 * _1MB];
        //分配B 到Eden 0.25Mb
        byte[] B = new byte[1/4 * _1MB];
        while (true){
            byte[] C = new byte[1/4 * _1MB];
            C = null;
        }
    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值