JAVA的软弱虚引用有什么用,主要在什么时候用?

发布网友 发布时间:2022-04-24 07:47

我来回答

1个回答

热心网友 时间:2022-06-17 18:19

强引用,任何时候都不会被;垃圾回收器回收,如果内存不足,宁愿抛出OutOfMemoryError


软引用,只有在内存将满的时候才会被垃圾回收器回收,如果还有可用内存,垃圾回收器不会回收


弱引用,只要垃圾回收器运行,就肯定会被回收,不管还有没有可用内存。


虚引用,虚引用等于没有引用,任何时候都有可能被垃圾回收。


----------------


下面谈谈我的理解:


软引用非常适合用来实现高速缓存。


高速缓存的特点,如果命中则能加快响应,如果未命中还能去重新获取原始数据。


如对某更新频率低,但查询很慢的数据库。SQL查询高速缓存是个不错的注意。

import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;
public class Test {

private static Map<String, SoftReference> sqlCache = new HashMap<>();

private static Object getFromChache(String sql) {
SoftReference sr = sqlCache.get(sql);
Object object = sr == null ? null : sr.get();
if (object == null) {
object = getFromQuery(sql);
sqlCache.put(sql, new SoftReference(object));
}
return object;
}

private static Object getFromQuery(String sql) {
        //从数据库查询,速度较慢。
return null;
}
}

 


---------------


为什么不直接使用Map<String, Object>,因为这样的话就会是强引用,随着缓存的越来越多,内存会耗尽,而垃圾回收不会回收,因为数据还被强引用引用。


而是用软引用,会在内存将耗尽的情况下,将其进行垃圾回收(会优先回收最近不被使用的软引用对象)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com