软引用 SoftReference

/**
* Date: 2021/5/21 14:52
* 内存够用的情况下,不会被GC,但是当内存不够用时,会被GC
*/
public class SoftReferenceDemo {

   public static void softRef_Memory_Enough() {
       Object o1 = new Object();
       SoftReference<Object> softReference = new SoftReference<>(o1);
       System.out.println(o1);
       System.out.println(softReference.get());

       o1 = null;
       System.gc();
       System.out.println(o1);
       System.out.println(softReference.get());

   }

   /**
    * JVM配置,故意产生大对象并配置小的内存,让它内存不够用了导致OOM,看软引用的回收情况
    * -Xms5m -Xmx5m -XX:PrintGCDetails
    */
   public static void softRef_Memory_NotEnough() {
       Object o1 = new Object();
       SoftReference<Object> softReference = new SoftReference<>(o1);
       System.out.println(o1);
       System.out.println(softReference.get());

       o1 = null;
//        这里JVM自动GC,内存不够
       try {
           byte[] bytes = new byte[30 * 1024 * 1024];
       }catch (Throwable e) {
           e.printStackTrace();
       }finally {
           System.out.println(o1);
           System.out.println(softReference.get());
       }
   }
   public static void main(String[] args) {
//        softRef_Memory_Enough();
       softRef_Memory_NotEnough();
   }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容