`
TonySun3544
  • 浏览: 160959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SoftReference<T>

    博客分类:
  • Java
阅读更多

类 SoftReference<T>

 

java.lang.Object 继承者

java.lang.ref.Reference<T> 继承者

java.lang.ref.SoftReference<T>

 

 

 

public class SoftReference<T>
extends Reference<T>

软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。软引用对象最常用于实现内存敏感的缓存。

假定垃圾回收器确定在某一时间点某个对象是软可到达对象。这时,它可以选择自动清除针对该对象的所有软引用,以及通过强引用链,从其可以到达该对象的针对任何其他软可到达对象的所有软引用。在同一时间或晚些时候,它会将那些已经向引用队列注册的新清除的软引用加入队列。

软可到达对象的所有软引用都要保证在虚拟机抛出 OutOfMemoryError 之前已经被清除。否则,清除软引用的时间或者清除不同对象的一组此类引用的顺序将不受任何约束。然而,虚拟机实现不鼓励清除最近访问或使用过的软引用。

此类的直接实例可用于实现简单缓存;该类或其派生的子类还可用于更大型的数据结构,以实现更复杂的缓存。只要软引用的指示对象是强可到达对象,即正在实际使用的对象,就不会清除软引用。例如,通过保持最近使用的项的强指示对象,并由垃圾回收器决定是否放弃剩余的项,复杂的缓存可以防止放弃最近使用的项。

 

 


构造方法摘要
SoftReference(T referent)
创建引用给定对象的新的软引用。
SoftReference(T referent, ReferenceQueue<? super T> q)
创建一个引用给定对象的新的软引用,并向给定队列注册该引用。

 

方法摘要
T get()
返回此引用对象的指示对象。


从类 java.lang.ref.Reference 继承的方法
clear, enqueue, isEnqueued


从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

<!-- ========= CONSTRUCTOR DETAIL ======== --><!-- -->

构造方法详细信息


SoftReference

public SoftReference(T referent)
创建引用给定对象的新的软引用。新的引用没有向任何队列注册。

 

参数:
referent - 新的软引用将引用的对象


SoftReference

public SoftReference(T referent,
                     ReferenceQueue<? super T> q)
创建一个引用给定对象的新的软引用,并向给定队列注册该引用。

 

参数:
referent - 新的软引用将引用的对象
q - 该引用向其注册的队列,如果不需要注册,则为 null

 


方法详细信息


get

public T get()
返回此引用对象的指示对象。如果此引用对象已经由程序或垃圾回收器清除,则此方法将返回 null

 

覆盖:
Reference<T> 中的 get
返回:
此引用所引用的对象;如果此引用对象已经清除,则返回 null

 

 


 

分享到:
评论

相关推荐

    在Android的应用中实现网络图片异步加载的方法

    Bitmap&gt;&gt; cache = Collections.synchronizedMap(new LinkedHashMap&lt;String, SoftReference&lt;Bitmap&gt;&gt;(100, 1.5f, true)); public MemoryCache() { } public Bitmap getBitmap(String url) { SoftReference&lt;Bitmap&gt; ...

    java之反射优化(缓存思路)源码

    classCache.put(className, new SoftReference&lt;&gt;(clazz)); return clazz; } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } } ``` 3. **Guava库的`LoadingCache`**:Google的Guava...

    Android中的软引用和弱引用

    softReferenceCache.put(key, new SoftReference&lt;&gt;(bitmap)); weakReferenceCache.put(key, new WeakReference&lt;&gt;(bitmap)); } public Bitmap getSoftReference(String key) { SoftReference&lt;Bitmap&gt; ref = ...

    程序避免被GC 回收 --------引用

    SoftReference&lt;Bitmap&gt; bitmapCache = new SoftReference&lt;&gt;(bitmap); ``` 这段代码创建了一个Bitmap对象,并使用软引用来存储它。当系统内存紧张时,这个Bitmap可能会被垃圾回收器回收,而不会导致程序崩溃。 ### ...

    Android基于SoftReference缓存图片的方法

    SoftReference&lt;Bitmap&gt; bitmapCache = new SoftReference&lt;&gt;(bitmap); // 将软引用的Bitmap对象存入缓存 imageCache.put("imageKey", bitmapCache); ``` 在需要使用图片时,我们从缓存中获取`SoftReference`对象,...

    Java中弱引用软引用虚引用及强引用的区别Java开发Ja

    - 示例:`SoftReference&lt;String&gt; softRef = new SoftReference&lt;&gt;(new String("SoftReference Test"));` 3. **弱引用(Weak Reference)**: - 弱引用比软引用更弱,只要垃圾收集器运行,无论内存是否充足,都会...

    基于软引用实现的缓存,当内存不够使会自动释放缓存内容,以避免OOM

    cache.put(key, new SoftReference&lt;&gt;(newValue)); return newValue; } private V loadValue(K key) { // 这里模拟从持久化存储或其他地方加载数据 return loadFromDatabaseOrOtherSources(key); } } ``` 在...

    Java 引用1

    SoftReference&lt;String&gt; softRef = new SoftReference&lt;&gt;(new String("hello"), referenceQueue); ``` 3. **弱引用**: - 弱引用的对象比软引用的对象有更短的生命周期。一旦垃圾回收器开始工作,无论内存是否紧张...

    java 引用相关文档

    - 示例:`SoftReference&lt;String&gt; softRef = new SoftReference&lt;&gt;(new String("Hello"));` 3. **弱引用(Weak Reference)** - 弱引用比软引用更弱,无论内存是否充足,只要垃圾收集器工作,就会回收弱引用所指向...

    图片缓存机制代码

    this.cacheMap = new HashMap&lt;String, SoftReference&lt;Bitmap&gt;&gt;(); } public Bitmap loadCacheImage(String imagePath){ Bitmap bitmap = null; if (cacheMap.containsKey(imagePath)) { bitmap = ...

    android 图片缓存处理

    mSoftCache.put(key, new SoftReference&lt;&gt;(oldValue)); // 当LRU缓存移除元素时,将其加入软引用缓存 } }; mSoftCache = new LinkedHashMap&lt;String, SoftReference&lt;Bitmap&gt;&gt;(SOFT_CACHE_SIZE, 0.75f, true) { ...

    JAVA GC 与 JVM调优1

    创建软引用的代码示例:`SoftReference&lt;Object&gt; sf = new SoftReference&lt;&gt;(obj);` 3. **弱引用**(Weak Reference):弱引用比软引用的生存期更短,第一次垃圾回收时就会被回收。弱引用适用于监测对象是否即将被...

    Java 7之基础 - 强引用、弱引用、软引用、虚引用1

    - **例子**:`SoftReference&lt;Object&gt; softRef = new SoftReference&lt;&gt;(new Object());` - **特点**:软引用常用于缓存策略,当内存不足时,垃圾收集器会回收这些对象,以避免系统出现`OutOfMemoryError`。 4. **虚...

    Java的四种引用

    SoftReference&lt;String&gt; softRef = new SoftReference&lt;&gt;(str, queue); if (queue.poll() == null) { System.out.println("soft reference is still valid."); } else { System.out.println("soft reference has ...

    java 常见的四种引用

    SoftReference&lt;String&gt; softRef = new SoftReference&lt;&gt;(str); // 如果内存足够,str 可以继续使用 String strFromSoftRef = softRef.get(); ``` #### 3. 弱引用 (Weak Reference) 弱引用是另一种允许被垃圾回收的...

    Java引用类型1

    SoftReference&lt;String&gt; softRef = new SoftReference&lt;&gt;(new String("Soft")); ``` - `WeakHashMap`是使用软引用作为键的一个例子,即使键的对象在其他地方仍被引用,只要内存压力增大,键对象也会被回收。 3. **...

    GridView+异步请求图片 ,ListView+异步请求图片

    两个例子: (1)GridView+异步请求图片 (2)ListView+异步请求图片 用HashMap&lt;String , SoftReference&lt;Drawable&gt;&gt; 来存储缓存图片,以便再次加载

    深入探讨 java.lang.ref 包1

    SoftReference&lt;Bean&gt; bean = new SoftReference&lt;&gt;(new Bean("name", 10)); System.out.println(bean.get()); // 输出 "name:10" ``` 软引用通过 `get()` 方法获取对象的强引用,当对象被回收后,`get()` 方法将返回...

    Java中的强软弱虚引用

    SoftReference&lt;Object&gt; softRef = new SoftReference&lt;&gt;(new Object()); ``` 软引用通常用于实现内存敏感的缓存技术。例如,当应用程序加载图像或大型数据结构时,可以使用软引用将这些数据缓存起来。当内存紧张时,...

    Java/Android引用类型及其使用全面分析

    `SoftReference&lt;A&gt; srA = new SoftReference&lt;A&gt;(a);`创建了一个软引用。即使强引用被设为null,软引用仍然能访问对象,除非系统内存紧张时。只有当内存不足并且软引用指向的对象无其他强引用时,垃圾收集器才会回收...

Global site tag (gtag.js) - Google Analytics