Java基础-对象的引用类型

上一篇 << 下一篇 >>>JVM元空间(方法区)和栈内存溢出原因及解决方案


强引用

Object o = new Object(); 被引用关联的对象永远不会被垃圾收集器回收。

QuoteEntity user1 = new QuoteEntity("jarye");
QuoteEntity user2 = user1;
user1 = null;
System.out.println(user2);
System.gc();
System.out.println(user2);
---------------------------------------------------------------
打印结果:
com.jarye.quote.entity.QuoteEntity@2f410acf
com.jarye.quote.entity.QuoteEntity@2f410acf

软引用

SoftReference 软引用关联的对象,只有当系统内存溢出时,才会回收软引用的对象。(用来做缓存)

ArrayList> objects = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    SoftReference softReference = new SoftReference<>(new byte[4 * 1024 * 1024]);
    System.out.println("======="+softReference.get());
    objects.add(softReference);
}
System.out.println("打印结果:");
objects.forEach((t) -> {
    System.out.println("-------------"+t.get());
});

参数设置:-Xmx8m -XX:+PrintGCDetails -verbose:gc
响应结果:
=======[B@768debd
=======[B@490d6c15
=======[B@7d4793a8
=======[B@449b2d27
=======[B@5479e3f
=======[B@27082746
=======[B@66133adc
=======[B@7bfcd12c
=======[B@42f30e0a
=======[B@24273305
-------------null
-------------null
-------------null
-------------null
-------------null
-------------null
-------------null
-------------null
-------------null
-------------[B@24273305
tips:虚拟机设置了8M,由于其他也占用空间,所以最后只存了一个

弱引用

WearkReference 只能存在于下一次gc之前:发生minorgc majorgc就会被回收

QuoteEntity user1 = new QuoteEntity("jarye");
WeakReference weakReference = new WeakReference(user1);
user1 = null;
System.out.println(weakReference.get());
System.gc();
System.out.println(weakReference.get());
---------------------------------------------------------------
打印结果:
com.jarye.quote.entity.QuoteEntity@2f410acf
null

虚引用

Object o = new Object();
O=null; 提醒我们的gc来回收这个对象
tips:基本上没用,必须要PhantomReference修饰,结果随时可能为空

QuoteEntity user1 = new QuoteEntity("jarye");
ReferenceQueue referenceQueue = new ReferenceQueue();
PhantomReference phantomReference = new PhantomReference(user1, referenceQueue);
System.out.println(phantomReference.get());
---------------------------------------------------------------
null
 
 

tips:软弱虚对应引用的指针放入到引用队列中,实现清理。


相关文章链接:
<< << << << << <<<为什么重写equals还要重写hashcode方法
<<<如何自定义注解
<<<十大经典排序算法汇总-动画演示
<<

你可能感兴趣的:(Java基础-对象的引用类型)