Java中的引用类型

付威     2019-05-02   1176   3min  

在java中对于变量的访问分为3种,分别为强引用,软引用和弱引用 . 在这篇博客中可以认识到三种引用的类型的特点和使用场景。 首先通过一段代码来认识三者的区别:


package com.pay.utils;

import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

/**
 * @author liuhaibo on 2018/03/06
 */
public class WeakRefDemo {
	
	public static void main(String... args) {
		
		// all these objects have a strong reference
		Object objA = new Object();
		Object objB = new Object();
		Object objC = new Object();
		
		// other references to these objects
		Object strongA = objA;
		SoftReference<Object> softB = new SoftReference<>(objB);
		WeakReference<Object> weakC = new WeakReference<>(objC);
		
		objA = null;
		objB = null;
		objC = null;
		
		System.out.println("GC前各变量的值:");
		System.out.println(String.format("strongA = %s, softB = %s, weakC = %s", strongA, softB.get(), weakC.get()));
		
		System.out.println("执行GC");
		
		System.gc();
 
		System.out.println("GC之后:");
		System.out.println(String.format("strongA = %s, softB = %s, weakC = %s", strongA, softB.get(), weakC.get()));
	}
}


打印结果如下:

ThreadLocal

可看到三个类型的引用在GC之后的表现:

  1. 强类型: 是常用的引用类型,如果变量正在被引用,在内存不足的情况下,jvm抛出OutofMemory也不会回收。
  2. 软类型: 在内存不足的情况下才会被回收,比较适合作为缓存使用。
  3. 弱引用: 等同于没有引用,在GC回收的时候,如果发现都是弱引用,则会判断为没有引用,可以直接被GC垃圾回收。
(本文完)

作者:付威

博客地址:http://blog.laofu.online

如果觉得对您有帮助,可以下方的RSS订阅,谢谢合作

如有任何知识产权、版权问题或理论错误,还请指正。

本文是付威的网络博客原创,自由转载-非商用-非衍生-保持署名,请遵循:创意共享3.0许可证

交流请加群113249828: 点击加群   或发我邮件 laofu_online@163.com

付威

获得最新的博主文章,请关注上方公众号