当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java java.lang.ref.SoftReference用法及代码示例


当我们在Java中创建一个对象时,默认情况下对象不是软的。要创建软引用对象,我们必须将其显式指定为JVM。在软引用中,即使对象可以进行垃圾回收,但直到 JVM 严重需要内存时,它也不会被垃圾回收。当 JVM 内存不足时,对象将从内存中清除。

为什么使用软引用对象?

当创建软引用对象时,它会被标记为垃圾回收。但是,除非 JVM 内存不足,否则不会对它进行垃圾回收。

java.lang.ref.SoftReference Class in Java

SoftReference 类中的构造函数:

Constructor parameters

Constructor Description

SoftReference(T 指代) 创建引用给定对象的新软引用。
SoftReference(T 所指对象,ReferenceQueue <T> q) 创建一个新的软引用,该引用引用给定的对象并注册到给定的队列中。

get()方法:

Java


// Java program to show the demonstration
// of get() method of SoftReference Class
import java.lang.ref.SoftReference;
class GFG {
    public static void main (String[] args) {
       
        // creating a strong object of MyClass
          MyClass obj = new MyClass ();
       
          // creating a weak reference of type MyClass
          SoftReference<MyClass> sobj = new SoftReference<>(obj);
       
          System.out.println ("-> Calling Display Function using strong object:");
          obj.Display ();    
       
          System.out.println ("-> Object set to null");
       
          obj = null;
       
        // Calling the get() method
          obj = sobj.get();
          System.out.println ("-> Calling Display Function after retrieving from soft Object");
          obj.Display ();
    }
}
class MyClass {
      void Display () 
    {
        System.out.println ("Display Function invoked ...");
    }
}
输出
-> Calling Display Function using strong object:
Display Function invoked ...
-> Object set to null
-> Calling Display Function after retrieving from soft Object
Display Function invoked ...

显示 SoftReference 类的 enqueue() 和 isEnqueued() 方法的示例:

Java


// Java program demonstrating all the methods
// of SoftRefernce Class
import java.lang.ref.SoftReference;
class GFG {
    public static void main (String [] args) {
      
        // Creating object of Class X
        X obj = new X ();
       
        // Creating a soft reference of type X
          SoftReference <X> softobj = new SoftReference <X> (obj);
       
          System.out.println ("-> Retrieving object from Soft Reference using get ()");
          softobj.get().show();
       
          System.out.println ("-> Is it possible to queue object using enqueue ()");
          System.out.println (softobj.enqueue ());
       
          System.out.println ("-> Checking if reference is queued using isEnqueued ()");
          System.out.println (softobj.isEnqueued ());
    }
}
class X {
    void show() 
    {
        System.out.println ("show () from X invoked..");
    }
}
输出
-> Retrieving object from Soft Reference using get ()
show () from X invoked..
-> Is it possible to queue object using enqueue ()
false
-> Checking if reference is queued using isEnqueued ()
false

从参考类继承的方法:

方法名称

Method Description

清除 () 清除该引用对象。
入队 () 将此引用对象添加到其注册的队列(如果有)。
得到 () 返回此引用对象的指示对象。
已入队 () 告知此引用对象是否已被程序或垃圾Collector排队。


相关用法


注:本文由纯净天空筛选整理自varunkedia大神的英文原创作品 java.lang.ref.SoftReference Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。