- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何自动清除instanceMap的key和value;当 getInstance() API 返回的 Conf 对象是使用 WeakHashMap 和 WeakReference 进行垃圾收集时...?
//single conference instance per ConferenceID
class Conf {
private static HashMap<String, Conf> instanceMap = new HashMap<String, Conf>;
/*
* Below code will avoid two threads are requesting
* to create conference with same confID.
*/
public static Conf getInstance(String confID){
//This below synch will ensure singleTon created per confID
synchronized(Conf.Class) {
Conf conf = instanceMap.get(confID);
if(conf == null) {
conf = new Conf();
instanceMap.put(confID, conf);
}
return conf;
}
}
}
最佳答案
如果您想在key被丢弃时进行清理,请使用WeakHashMap。如果您希望对丢弃的值进行清理,则需要自己执行此操作。
private static final Map<String, WeakReference<Conf>> instanceMap = new HashMap<>;
/*
* Below code will avoid two threads are requesting
* to create conference with same confID.
*/
public static synchronized Conf getInstance(String confID){
//This below synch will ensure singleTon created per confID
WeakReference<Conf> ref = instanceMap.get(confID);
Conf conf;
if(ref == null || (conf = ref.get()) == null) {
conf = new Conf();
instanceMap.put(confID, new WeakReference<Conf>(conf));
}
return conf;
}
注意:这可能会留下死键。如果您不希望这样,则需要清理它们。
for(Iterator<WeakReference<Conf>> iter = instanceMap.values().iterator(); iter.hashNext() ; ) {
WeakReference<Conf> ref = iter.next();
if (ref.get() == null) iter.remove();
}
关于java - WeakHashMap 和 WeakReference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134401/
在下面的代码中,我创建了一个 Pen 对象并将其颜色初始化为白色。在 Pen 的构造函数中,将字段“penColor”设置为传递给构造函数的值后,我更新了一个全局静态弱 HashMap ,其中 KEY
我正在运行一个游戏,当我启动时,我将图像加载到图像的 WeakHashMap 中。当我运行游戏时,我的 RAM 不断增加,最终我的 WeakHashMap 只是卸载所有数据。这与垃圾收集有关吗?有什么
是否存在所有值都是弱引用的 Map 类?类似于 WeakHashMap,但用于值而不是键。 提前致谢... 最佳答案 您可以使用 MapMaker这是 Guava 的一部分。 "Java DOC:A
我正在阅读有关 WeakHashMap 的 Java 文档我得到了基本概念。由于 GC 线程在后台运行,您可能会出现“异常行为”,例如迭代时出现 ConcurrentModificationExcep
我试图弄清楚 WeakHashMap 在垃圾收集后如何清理。正如你们中许多人可能知道的那样,当 WeakHashMap 条目的键被垃圾回收时,它会自动删除。但是,例如,如果我做这样的事情: List>
我想对将在内存中短时间存在的对象使用 WeakHashMap。 每个对象都有一个 id(唯一的整数字段,它是来自数据库的主键),所以我的第一个想法是使用该字段作为对象的键。 但是,Integer 是不
我正在寻找与 等价的 WeakHashMap 类,除了它把多个键映射到一个值,所以真的更像 WeakHashMap WeakHashMap etc. get 和 set 条目的方式类似于数据库中的多列
这个问题在这里已经有了答案: When would you use a WeakHashMap or a WeakReference? (10 个答案) 关闭 7 年前。 至于 weakhashma
Javadocs 说“当一个键被丢弃时,它的条目被有效地从 map 中移除”。 但除非有另一个线程偶尔会删除这样的 Map.Entry条目,值对象不会被 map 强引用吗?但是因为没有这样的线程在运行
我同时使用了 WeakHashMap。我想基于一个 Integer 参数实现细粒度的锁定;如果线程 A 需要修改由 Integer a 标识的资源,而线程 B 需要修改由 Integer b 标识的资
今天我找到了this blog post其中讨论了 WeakHashMap 在缓存上的用法。有趣的是,不是值,而是键被存储为弱引用,当引用不再存在时,整个键值对将从 WeakHashMap 中删除。因
我想测试 Java WeakHashMap 类的功能,为此我编写了以下测试: public class WeakHashMapTest { public static void main(String
如果没有对其中一个键的 Activity 引用,我如何模拟 WeakHashMap 中条目的删除。我有下一个代码: WeakHashMap weakMap = new WeakHashMap(); I
我正在使用 WeaekHashMap 来实现缓存。我想知道如果我正在遍历这个映射的键,同时垃圾收集器正在主动从这个映射中删除键,我会收到一个 ConcurrentModificationExcepti
是HashSet> Set相当于WeakHashMap ?也就是说,当条目不再被引用时,它们会自动删除吗? 如果不是,等价的是什么? 最佳答案 不,如果集合中的 WeakReference 之一引用的
有一个 WeakHashMap 实例初始化了,例如,500 个条目。现在,它的 key 在运行的应用程序中的任何地方都没有被引用一天左右。这张 map 的条目会在一定时间后自动删除吗? 我的理解是,如
如何自动清除instanceMap的key和value;当 getInstance() API 返回的 Conf 对象是使用 WeakHashMap 和 WeakReference 进行垃圾收集时
首先我想澄清一下我对WeakReference的理解因为以下问题取决于相同。 static void test() { Person p = new Person(); WeakRef
所以我有一个从 ORM/Hibernate 相互引用的对象链 大陆 有很多国家 有很多状态 有很多城市 有很多城市 国家 有一个国家 有很多状态 有很多城市 有很多城市 状态 拥有一个大陆 有一个国家
我有一个这样的代码。 private static Map PATTERNS; private static Map patterns() { if (PATTERNS == null) {
我是一名优秀的程序员,十分优秀!