在嵌套集合的情况下正确使用Java Weak Reference(Proper usage of Java Weak Reference in case of nested collections)
我需要定义一个弱引用Map,其值为Set。 我使用Google系列的MapMaker,如下所示:
Map<Class<? extends Object>, Set<Foo>> map = new MapMaker().weakKeys().weakValues().makeMap();
那么,对于
Set<Foo>
,我可以使用普通的HashSet
吗? 或者,我是否必须创建一个弱HashSet,如下所示:Collections.newSetFromMap(new WeakHashMap<Foo, Boolean>());
为什么?
另一个问题,我的地图的关键是Class对象,Class对象何时变得弱可达? 换句话说,Class对象的生命周期是多少?
谢谢。
更新:第一个问题不是很清楚。 我担心的是,当我执行
map.get(key).add(foo)
将foo实例添加到Set时,这是否也会添加对foo实例的强引用,从而阻止它被GCed? 这就是为什么我想知道我是否应该使用弱HashSet。I need to define a weak reference Map, whose value is a Set. I use Google collections' MapMaker, like this:
Map<Class<? extends Object>, Set<Foo>> map = new MapMaker().weakKeys().weakValues().makeMap();
So, for
Set<Foo>
, can I use a normalHashSet
? Or, do I have to create a weak HashSet, like this:Collections.newSetFromMap(new WeakHashMap<Foo, Boolean>());
And why?
Another question, the key of my map is Class objects, when will a Class object become weakly reachable? In other words, what is the lifetime of a Class object?
Thanks.
Update: The 1st question is not really clear. My concern was that when I do
map.get(key).add(foo)
to add foo instance to the Set, will this also add a strong reference to foo instance and thus preventing it from being GCed? That's why I was wondering if I should use a weak HashSet.
原文:https://stackoverflow.com/questions/2793195
相关问答
更多-
CM 2.0支持NET40(参见https://github.com/Caliburn-Micro/Caliburn.Micro/releases )。 CM 2.0 supports NET40 (see https://github.com/Caliburn-Micro/Caliburn.Micro/releases).
-
Micro Framework直接在硬件上运行,可以看作是一种操作系统。 Compact Framework是Windows CE上.NET的运行时环境,虽然需要运行底层操作系统。 Micro Framework is running directly on the hardware and can be seen like a kind of operating system. Compact Framework is the runtime Envirenment for .NET on Windows ...
-
通过CodePlex上提供的插件文件解决方案(点击此处) ,也包含有关框架的建议。 注意:在电子课中遇到这个问题,谷歌搜索上面的答案,在这里发布解决方案供人们查找,以供档案和便于将来参考。 描述 在只安装了.NET Framework 4.0的计算机上构建.NET Micro Framework项目(例如,在干净的Windows XP Mode虚拟机上的Visual Studio 2010)期间,MetaDataProcessor会因上述错误而失败。 要解决此问题,请将附加的MetaDataProcesso ...
-
您选择的开发平台将受到可用工具的严格限制。 对于更小众的uControllers,您可能会发现没有多少选择。 有一件事是肯定的,没有一家工具供应商会对受支持的Chromebook作为一个独特的平台感兴趣,因为它在已经很小的市场中占了很小的比例。 同样,基于Web服务的工具也非常适合我,我很难理解为什么有人会想要它们。 最好的办法是安装Linux - 只要你想在它下面运行你想要使用的开发工具。 GCC肯定可以,但对于专有工具,它可能必须是某种风格的Windows - 而且很可能是XP。 使用USB串行加密狗可 ...
-
来自Netduino论坛 : 很快,我们将推出一个开源项目,将.NET Micro Framework SDK移植到Mono,以便在Mac和Linux上使用。 他们发布了MFDeploy for Mono(Mac和Linux)的第一个alpha版本 。 From the Netduino forums: Soon, we'll be launching an open source project to port the .NET Micro Framework SDK to Mono for use on ...
-
你可以看看Python中的各种选项 - Django(显然!) 主塔 NAGARE 烧瓶 Django真的很棒。 没有你的信息是不正确的,HTML模板真的很容易编辑它们。 这也是来自Nagare的开发者 - Ajax无需编写任何Javascript代码或使用延续使Web应用程序看起来像桌面应用程序。 事实上,我们经常发现像您这样的开发人员,如果没有以前的Web经验,可能会更快地获得Nagare,因为他们没有什么可以“忘却”的。 我正在深入研究这个框架既然你说你的应用程序是AJAX密集型的。 据我所知,纳格尔 ...
-
GHI的产品通过其.NET Micro扩展支持CAN。 看到这里的开发系统。 有关CAN实现的详细信息,请参阅此处的文档: The offerings from GHI support CAN through their .NET Micro extensions. See here for a development system. Refer to the documentation here for details on the CAN implementation:
-
将ExtensionAttribute类添加到项目中时,也可以在.NET Micro Framework中使用扩展方法。 namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] public sealed class ExtensionAttribute : Attribu ...
-
众所周知的是Tahoe 。 其他人是 http://www.sjjmicro.com/EDK.html http://www.ghielectronics.com/details.php?id=107&sid=108 A well known one is Tahoe. Others are http://www.sjjmicro.com/EDK.html http://www.ghielectronics.com/details.php?id=107&sid=108
-
复制BitArray的功能并不是非常困难。 首先,如果您需要少于65位,那么您可以使用long或小。 设置个人位: void Set(ref long ba, int bit) { ba |= 1L << bit; } 要清楚一点: void Clear(ref long ba, int bit) { long mask = 1L << bit; mask = ~mask; ba &= mask; } 要查看是否设置了位: bool IsSet(long ba, int ...