基本的不同之处在于,应该在每次运行GC时声明弱引用(保持内存占用率低),而软引用应该保留在内存中,直到GC实际需要内存(它们尝试扩展生命周期但可能随时失败,这对于例如特别是相当昂贵的对象的高速缓存是有用的.
据我所知,没有明确的陈述说明弱引用如何影响.NET中对象的生命周期.如果它们是真正的弱参考,它们根本不应该影响它,但是这也会使它们对于我们认为缓存的主要目的而言毫无用处(我错了吗?).另一方面,如果他们的行为像软参考,他们的名字有点误导.
就个人而言,我想他们的行为就像软参考,但这只是一种印象,而不是创立.
当然,实施细节也适用.我问的是与.NET的弱引用相关的心态 - 它们是否能够延长寿命,还是它们的行为像真正的弱引用?
(尽管有一些相关的问题我还没找到这个具体问题的答案.)
我很熟悉WeakReference
,但我正在寻找一种仅在内存不足时才清除的引用类型,而不仅仅是每次gc运行时(就像Java一样SoftReference
).我正在寻找一种实现内存敏感缓存的方法.