永发信息网

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

答案:1  悬赏:0  手机版
解决时间 2021-11-25 03:02
JAVA的软弱虚引用有什么用,主要在什么时候用?
最佳答案
强引用,任何时候都不会被;垃圾回收器回收,如果内存不足,宁愿抛出OutOfMemoryError


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


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


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


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


下面谈谈我的理解:


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


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


如对某更新频率低,但查询很慢的数据库。SQL查询高速缓存是个不错的注意。
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;
public class Test {

private static Map 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,因为这样的话就会是强引用,随着缓存的越来越多,内存会耗尽,而垃圾回收不会回收,因为数据还被强引用引用。


而是用软引用,会在内存将耗尽的情况下,将其进行垃圾回收(会优先回收最近不被使用的软引用对象)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
蛋糕边怎么抹平
口袋妖怪3ds喷火龙刷什么属性好
我哥去世,我嫂子和我侄子有权继承我父母的遗
福安哪里有手工活可以带回家做的
中国太平洋财产保险克拉玛依中心支公司在什么
泰语怎么区分前引字和复合辅音
一个圆柱油桶横着放,长5.5米,直径2.4米,里
香港昂坪360 缆车 一年有多少人坐
E3-1231V3电脑配置
姜汤可以去湿吗?
我要开通QPRS
姐姐你是大暖女,你最好了,永远爱你韩语怎么
悲风骤至,日至将夕。是什么意思?
家里一个没人睡的房间突然有很多这种虫子,还
怎么你们云浮人对你们当地的地价都不清楚的么
推荐资讯
设备融资租赁(设备按揭,设备贷款)是什么意
动漫(CLANNAD)第二季里,朋也带汐去上学撞
玖融网可靠吗,玖融网7月9日运营报告
魅力魔方美甲店地址有知道的么?有点事想过去
你能回答他的问题吗?用英语翻译
薛家湾 153有个叫刘桂的女的,大概40左右。
人类创造ide各种文化作品属于文化的物质形态
吃白鸽真的会缩骨吗?
z中通快递黑龙江省到山西省几天到货了
f12011怎么存档
什么兰花可以吸引蜜蜂的
向日葵教育(镇江丹阳)地址在哪,我要去那里办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?