JAVA的软弱虚引用有什么用,主要在什么时候用?
答案:1 悬赏:0 手机版
解决时间 2021-11-25 03:02
- 提问者网友:沉默的哀伤
- 2021-11-24 04:24
JAVA的软弱虚引用有什么用,主要在什么时候用?
最佳答案
- 五星知识达人网友:零点过十分
- 2021-11-24 04:38
强引用,任何时候都不会被;垃圾回收器回收,如果内存不足,宁愿抛出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,因为这样的话就会是强引用,随着缓存的越来越多,内存会耗尽,而垃圾回收不会回收,因为数据还被强引用引用。
而是用软引用,会在内存将耗尽的情况下,将其进行垃圾回收(会优先回收最近不被使用的软引用对象)
软引用,只有在内存将满的时候才会被垃圾回收器回收,如果还有可用内存,垃圾回收器不会回收
弱引用,只要垃圾回收器运行,就肯定会被回收,不管还有没有可用内存。
虚引用,虚引用等于没有引用,任何时候都有可能被垃圾回收。
----------------
下面谈谈我的理解:
软引用非常适合用来实现高速缓存。
高速缓存的特点,如果命中则能加快响应,如果未命中还能去重新获取原始数据。
如对某更新频率低,但查询很慢的数据库。SQL查询高速缓存是个不错的注意。
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;
public class Test {
private static Map
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
而是用软引用,会在内存将耗尽的情况下,将其进行垃圾回收(会优先回收最近不被使用的软引用对象)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯