软引用的测试,GC内存分配

测试代码

package com.example.demo.entity;

import java.lang.ref.SoftReference;

/**
* 软引用的测试:内存不足即回收
* -Xmx10m -Xms10m -XX:+PrintGCDetails
 */
public class SoftReferenceTest {
    public static class User {
        public User(int id, String name) {
            this.id = id;
            this.name = name;
        }
 
        public int id;
        public String name;
 
        @Override
        public String toString() {
            return "[id=" + id + ", name=" + name + "] ";
        }
    }


    public static void main(String[] args) {

        // 创建对象,建立软引用
//        SoftReference<User> userSoftRef = new SoftReference<User>(new User(1, "songhk"));
        // 上面的一行代码,等价于如下的三行代码
        User u1 = new User(1, "cakin");
        SoftReference<User> userSoftRef = new SoftReference<User>(u1);
        u1 = null;//取消强引用
        // 从软引用中重新获得强引用对象
        System.out.println(userSoftRef.get());
        System.gc();
        System.out.println("内存足够:After GC:");
        // 垃圾回收之后获得软引用中的对象
        System.out.println(userSoftRef.get()); // 由于堆空间内存足够,所以不会回收软引用的可达对象。
        System.out.println("内存紧张或不足:After GC:");
        try {
            // 让系统认为内存资源不够 a
//             byte[] b = new byte[1024 * 1024 * 7];
            // 让系统认为内存资源紧张 b
            byte[] b = new byte[1024 * 1024 * 6];
        } catch (Throwable e) {
            e.printStackTrace();
        } finally {
            // 再次从软引用中获取数据
            System.out.println(userSoftRef.get()); // 在报 OOM 之前,垃圾回收器会回收软引用的可达对象。
        }
    }
}

设置

idea 设置VM选项 -Xmx10m -Xms10m -XX:+PrintGCDetails

GC面板

Heap
 PSYoungGen      total 2560K, used 185K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
  eden space 2048K, 9% used [0x00000000ffd00000,0x00000000ffd2e410,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
  to   space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
 ParOldGen       total 7168K, used 7031K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
  object space 7168K, 98% used [0x00000000ff600000,0x00000000ffcddde8,0x00000000ffd00000)
 Metaspace       used 3375K, capacity 4500K, committed 4864K, reserved 1056768K
  class space    used 366K, capacity 388K, committed 512K, reserved 1048576K

1.PSYoungGen:新生代为2560K
2.新生代又分为eden区 2048K,和s0区(from space)512K,s1区(to space)512K。
3.ParOldGen:老年代7168K
4.Metaspace:元空间

  • Xmx设置10M, 老年代跟新生代默认比例是7:3; (7168:3072)
  • 新生代 E区跟S区的比例是2:1 (2048:1024)
  • S区的S0 S1比例是1:1 (512:512)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值