java的softReference与weakReference

java.lang.ref包下提供了三个类SoftReference,phantomReference WeakReference,分别代表软引用,虚引用和弱引用

强引用,最常见的引用,程序创建一个对象,并把这个对象赋值给一个引用变量,通过该引用来实际操作对象

软引用,需要通过SoftReference类来实现,当一个对象只有一个软引用,它有可能被垃圾回收机制回收。内存空间足够时,不会被回收,不足够时将被回收


弱引用,需要通过WeakReference类来实现,当垃圾回收机制运行时,不管内存是否足够,总会回收该对象所占用的内存

weakReference一般用来防止内存泄漏,要保证内存被VM回收

softReference的话,好像多用作来实现cache机制.

 

 

软引用(Soft  Reference)的主要特点是具有较强的引用功能。只有当内存不够的时候才回收这类内存,因此在内存足够的时候,他们通常不被回收。另外,这些引用对象还能保证在Java  抛出OutOfMemory异常之前,被设置为null。他可以用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory异常。

软引用技术的引进使Java应用可以更好的管理内存,稳定系统,防止系统内存溢出,避免系统崩溃。因此在处理一些占用内存大而且声明周期较长,但使用并不频繁的对象时应尽量应用该技术。但事物总带有两面性的,有利也有弊,在某些时候对软引用的使用会降低应用的运行效率与性能,例如:应用软引用的对象的初始化过程较为耗时,或者对象的状态在程序的运行过程中发生了变化,都会给重新创建对象与初始化对象带来不同程度的麻烦,有些时候我们要权衡利弊择时应用。

 

Java代码 复制代码 收藏代码
  1. import java.lang.ref.WeakReference;   
  2. public class TestReference    
  3. {   
  4.     public static void main(String[] args)    
  5.     {   
  6.         //创建一个字符串对象   
  7.         String str = new String("Structs2 权威指南");   
  8.         //创建一个弱引用,让此引用引用到"Struts2 权威指南"字符串   
  9.         WeakReference wr = new WeakReference(str);   
  10.         //切断str引用和"Struts2 权威指南"字符串之间的引用    
  11.         str = null;   
  12.         //取出弱引用所引用的对象   
  13.         System.out.println(wr.get());   
  14.         //强制垃圾回收   
  15.         System.gc();   
  16.         System.runFinalization();   
  17.         ///再次取出弱引用所引用的对象   
  18.         System.out.println(wr.get());   
  19.     }   
  20. }   
import java.lang.ref.WeakReference;  
public class TestReference   
{  
    public static void main(String[] args)   
    {  
        //创建一个字符串对象  
        String str = new String("Structs2 权威指南");  
        //创建一个弱引用,让此引用引用到"Struts2 权威指南"字符串  
        WeakReference wr = new WeakReference(str);  
        //切断str引用和"Struts2 权威指南"字符串之间的引用   
        str = null;  
        //取出弱引用所引用的对象  
        System.out.println(wr.get());  
        //强制垃圾回收  
        System.gc();  
        System.runFinalization();  
        ///再次取出弱引用所引用的对象  
        System.out.println(wr.get());  
    }  
}  


输出:
Struts2 权威指南
null

 

 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值