SoftReference & WeakReference 都是相对 StrongReference,在某些条件下,非StrongReference会被垃圾回收,可以防止OOM。
SoftReference 比较好理解,就是在 Memory 满的时候,OOM之前,SoftReference对象会被GC回收。比较适合做缓存。
WeakReference,会咋对象不在被其他 Strong Reference后很快被GC回收,常用的 WeakHashMap,其 key 是该 map 对其的 weak reference, 当 key不在有其他 strong reference时(此时key仍然是被 weakHashMap weak reference 的),GC回收key,同时从 map把 key 对应的 item 删除,也就 remove key item,释放 value 值。一个例子如下:
public static void main(String[] args) throws InterruptedException {
Object ll = new Object();
WeakHashMap<Object, Object> map = new WeakHashMap<Object, Object>();
/*
输出结果为: null
*/
// HashMap<Object, Object> map = new HashMap<Object, Object>();
/*
输出结果为: null
java.lang.Object@42b1b4c3 : java.lang.Object@24e2dae9
*/
Object o1 = new Object();
map.put(ll, o1);
ll = null;
System.gc();
Object object = map.get(ll);
if (object == null) {
System.out.println("null");
} else {
System.out.println("Not null");
}
for (Entry<Object, Object> set : map.entrySet()) {
System.out.println(set.getKey() + " : " + set.getValue());
}
}
分享到:
相关推荐
SoftReference、WeakReference和PhantomReference分析和比较 在 Java 中,引用类型分为强引用、软引用、弱引用和虚引用四种。强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种...
Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用...
本文将深入探讨这个包中的四种主要引用类型:StrongReference、SoftReference、WeakReference 和 PhantomReference,以及它们的特性、用法和作用。 首先,强引用(StrongReference)是我们在日常编程中最常见的引用...
Java 弱引用(WeakReference)的理解与使用 Java 中的弱引用(WeakReference)是一种特殊的引用类型,它可以帮助我们更好地管理内存和避免内存泄漏。在 Java 中,当一个对象被创建时,它被放在堆(Heap)中。当垃圾...
周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度...
4. 使用WeakReference和SoftReference,WeakReference和SoftReference可以帮助避免内存泄漏。 Java的垃圾回收机制可以自动回收内存中的垃圾,避免内存泄漏,但是程序员需要注意避免内存泄漏的几点,以确保程序的...
在实际应用中,LRU算法不仅可以用于操作系统中的页面替换,还可以应用于数据库查询缓存、编程语言的内存管理(如Java的SoftReference和WeakReference)以及Web服务器的静态资源缓存等场景。 总的来说,Java实现LRU...
总结,java.lang.ref 包中的四种引用类型——StrongReference、SoftReference、WeakReference 和 PhantomReference,提供了不同的内存管理策略,适应不同的场景需求。强引用是最常用的引用类型,但在处理大对象或...
Java提供了几种不同类型的引用,如SoftReference和WeakReference,来帮助管理对象的生命周期。SoftReference会在系统即将发生内存溢出之前才释放引用的对象,而WeakReference则会在GC发现对象不可达时立即释放。这些...
4. WeakReference 与 SoftReference: WeakReference 和 SoftReference 都可以用于提高 GC 和内存的效率,但是 WeakReference 一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到...
在`java.lang.ref`包中,有三个类分别对应这四种引用:`SoftReference`、`WeakReference`和`PhantomReference`。此外,`ReferenceQueue`用于存储被回收引用的实例,以便开发者可以监控对象的回收状态。 在实际应用...
4. **空安全的引用(WeakReferences)**:在Java 11中,弱引用(WeakReference)、软引用(SoftReference)和虚引用(PhantomReference)现在支持一个新方法`referent()`,返回`null`表示引用的对象已被垃圾收集器...
为了防止这种情况,可以使用对象池,限制数据结构大小,或者使用`WeakReference`和`SoftReference`来减少内存占用。另外,了解Java的内存模型(如堆内存、栈内存和方法区)也有助于优化内存分配。 其次,分片处理是...
`java.lang.ref` 提供了与垃圾收集器交互的引用对象类,如 `WeakReference`, `SoftReference`。 `java.lang.reflect` 允许程序在运行时检查类和对象的结构。 `java.math` 包提供高精度的数学运算,如 `BigInteger`...
SoftReference<String> softRef = new SoftReference(new String("Soft")); ``` - `WeakHashMap`是使用软引用作为键的一个例子,即使键的对象在其他地方仍被引用,只要内存压力增大,键对象也会被回收。 3. **弱...
3. **Java_04_Ref**:这部分可能涉及到Java中的引用类型,如软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这些引用类型用于内存管理,帮助开发者避免内存泄漏,尤其是在大内存...
消除过期引用可以使用多种方法,例如,使用 WeakReference 或 SoftReference,或者使用 finalize() 方法来回收对象。 其他知识点 其他知识点还包括泛型、枚举和注解、Lambda 和 Stream、方法、通用编程、异常、...
引用类型如StrongReference、SoftReference、WeakReference和PhantomReference提供不同的对象可达性级别,有助于垃圾收集器管理内存。 Java泛型(Generics)提供编译时类型安全检测和消除类型转换的能力。它支持协...
面试官可能会让你解释 finalize() 方法的作用,以及何时应该使用 WeakReference 或 SoftReference。 7. **接口与抽象类**:两者之间的选择,以及Java 8引入的默认方法(default methods)如何改变这一格局。接口...