问题标签 [weak-references]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2137 浏览

java - 使用 Google Collections 创建 Weak Multimap

是否有与用于 MultiMaps 的漂亮 MapMaker 的等价物?目前我像这样创建缓存:

MultiMap 的重点是避免嵌套列表值。有没有办法用弱键构造多图?

0 投票
5 回答
3955 浏览

java - 弱引用是如何实现的?

我想知道弱引用在内部是如何工作的,例如在 .NET 或 Java 中。我的两个总体想法是:

  1. “侵入式” - 将弱引用列表添加到最顶级的类(对象类)。然后,当一个对象被销毁时,所有的弱引用都可以被迭代并设置为空。
  2. “非侵入式”——维护对象指向弱引用列表的哈希表。当弱引用 A 被创建到对象 B 时,哈希表中会修改或创建一个条目,其键是指向 B 的指针。
  3. “脏” - 为每个对象存储一个特殊的哈希值,当对象被销毁时,该值将归零。弱引用将复制该哈希值并将其与对象的值进行比较以检查对象是否处于活动状态。但是,当直接使用时,这会导致访问冲突错误,因此我认为需要有一个具有该哈希值的附加对象。

这些解决方案中的任何一个看起来既干净又高效。有谁知道它实际上是如何完成的?

0 投票
7 回答
10482 浏览

c# - WeakReference 是否提供良好的缓存?

我有一个缓存,它使用对缓存对象的 WeakReferences 来使它们在内存压力的情况下自动从缓存中删除。我的问题是缓存对象在存储在缓存中后很快就被收集起来。缓存在 64 位应用程序中运行,尽管仍有超过 4gig 的内存可用,但仍会收集所有缓存的对象(此时它们通常存储在 G2 堆中)。正如进程资源管理器所示,没有手动引发垃圾收集。

我可以应用哪些方法来使对象的寿命更长一些?

0 投票
8 回答
10700 浏览

java - ThreadLocal 资源泄漏和弱引用

我对ThreadLocal的有限理解是它存在资源泄漏问题。我收集到这个问题可以通过正确使用带有 ThreadLocal 的WeakReferences来解决(尽管我可能误解了这一点。)我只是想要一个正确使用带有 WeakReference 的 ThreadLocal 的模式或示例(如果存在)。例如,在这段代码片段中,WeakReference 会在哪里引入?

0 投票
6 回答
1622 浏览

c# - 函数返回时出现 NullReferenceException

运行我的多线程应用程序时,我收到 NullReferenceException,但仅当我在调试器之外以发布模式运行时。堆栈跟踪被记录下来,它总是指向同一个函数调用。我在函数中放置了几个日志语句来尝试确定它会走多远,并且每个语句都会被记录,包括函数最后一行的一个语句。有趣的是,当 NullReferenceException 发生时,函数调用之后的语句不会被记录:

每次调用函数时都不会发生异常。堆栈是否有可能在函数执行之前或执行过程中被破坏,导致返回地址丢失,导致空引用?我不认为在.NET 下这种事情是可能的,但我猜奇怪的事情已经发生了。

我尝试用函数的内容替换对函数的调用,所以一切都在内联发生,然后异常发生在如下所示的行上:

我通过日志验证了“classItemCollection”不为空,并且我还尝试将 foreach 更改为 for,以防 IEnumerator 做一些有趣的事情,但异常发生在同一行。

关于如何进一步调查的任何想法?

更新:一些响应者提出了与确保记录器不为空有关的可能解决方案。需要明确的是,在异常开始发生后添加了日志语句用于调试目的。

0 投票
1 回答
2154 浏览

java - 在java中的集合中查找弱引用对象

关于 Java 的 WeakReference 和 Collections 的几个问题:

  1. 是否有一个库可以通过 WeakReference 透明地实现 Java 的各种数据集接口(例如 Collection、List、Set、Queue 等)?像 WeakHashMap 是针对 HashMap 接口的吗?

  2. 或者是简单地创建普通集合然后使用某种技巧与 compareTo 或 Comparator 或其他东西来使搜索集合正常工作的常见解决方案?

我基本上是这样的:

但是接口的约定是对 E 的引用是弱存储的。get(int index)显然,当该对象消失等时返回 null没有问题,但我希望该contains(E e)函数和其他类似的项目能够正常工作。

我只是想避免“不是在这里发明”的陷阱,并确保如果我自己实现它,它可能是最简单的解决方案。

0 投票
3 回答
1792 浏览

visual-studio-2008 - 为什么 Visual Studio 2008 编译时卡在调试模式

我有一个 .NET 项目,由于某种原因陷入调试模式。我已经在工具栏中将编译模式从调试更改为发布,但我的项目最终还是在调试目录中。似乎VS没有更新SLN文件或其他东西。请帮忙!

我问这个问题的原因是,当我的程序运行时,似乎有弱引用“ENCList”阻塞了内存,并且它们似乎是在调试中编译 .NET 应用程序时创建的(或者说其他来源我已经网上找的)。

-标记

0 投票
3 回答
2071 浏览

c++ - 如何在 C++ 中维护指向父级的弱指针?

是否有一种标准方法可以在 C++ 中的子对象中维护指向父对象(使用共享指针创建)的弱指针?

本质上,我需要在以下几行中实现一些东西:

在上面所有的B 类实例中都需要持有一个指向它们的父对象(即A 类的对象)的弱指针。A 类对象使用 shared_ptr 实例化。我可以想到一个使用空删除器的解决方案。但这是做这种事情的标准方式吗?

0 投票
4 回答
9708 浏览

objective-c - 我有一个循环参考。如何在 Objective-C 中创建弱引用?

我正在开发一个 iPhone 应用程序。我有一个类对象Row,需要释放该类的许多对象Block。每个Block当前都有一个属性,该属性保留 class 的实例变量Row

每个都Row包含NSMutableArray这些块中的一个。

我知道这是一个循环引用。Apple 的文档指出,为了释放具有循环引用的对象,我需要一个弱引用而不是强引用(保留属性),但它没有贯彻并解释我是如何做到这一点的。我计划同时释放和释放行内的所有块以及行本身。如何在我的每个块中设置对其“父”行的弱引用?

0 投票
9 回答
7600 浏览

.net - .NET 中的弱事件?

如果对象 A 侦听来自对象 B 的事件,则对象 B 将使对象 A 保持活动状态。是否有弱事件的标准实现可以防止这种情况发生?我知道 WPF 有一些机制,但我正在寻找与 WPF 无关的东西。我猜该解决方案应该在某处使用弱引用。