草庐IT

SoftReferences

全部标签

java - SoftReferences 与 Weakreferences/OutOfMemoryError

我在处理软引用和弱引用时遇到了问题。代码有一个可以切换的标志软引用和弱引用之间的所有逻辑。虽然引用很弱,但似乎为了工作正常,使用软引用我一直得到OutOfMemoryError。这种情况发生在MacOSX上的JDK7和JDK6以及Debian上的IcedTea6上。然而,带有G1收集器的JDK7是我发现使用软引用的设置,我尝试的其他所有内容(串行/并行GC、-client/-server等)都失败了异常。代码有点大,但我已尝试在保留问题的同时尽可能缩小范围。我在上面留下了大量评论,更详细地描述了如何重现问题。/***Leakling.java***Issue:***Thiscodeth

Android 堆大小和 SoftReferences

我有一个创建一系列位图的应用程序。我将这些位图保存在SoftReferences中,以避免内存不足。我希望堆大小在开始收集我的SoftReferences之前增长到最大16MB。然而,SoftReferences在堆增长到最大之前被非常急切地收集。有没有办法强制不那么急切地收集引用文献?还是手动将堆增长到最大值?可能是一种只分配16mb启动应用程序的方法? 最佳答案 目前无法修改SoftReference集合行为。我不确定“手动将堆增长到最大值”是什么意思。如果这些是Bitmap类的实例(与某些自定义位图实现相反),像素数据实际上存

java - 确定 Android 上的可用内存

因此,Android面临的挑战之一是各种设备规范(尤其是设备内存)。我编写的模型对象以延迟加载的方式广泛使用JavaSoftReferences,因此VM可以根据需要随意修剪数据模型中当前未使用的部分,并且它们是只是根据需要重组。但是,SoftReferences实践中的一个挑战是,它们往往会在成为弱引用后的几秒钟内被清除,而不是一直停留到VM内存不足,因此它们运行良好在允许模型修剪方面,但它们效果不佳,因为它通常意味着内存中没有任何内容。理想情况下,在具有充足内存的设备上,您可以让用户受益于将对象保存在内存中。因此,通常将SoftReferences与LRU机制结合使用,其中LRU保

Android:GC 不尊重 SoftReferences?

看起来Dalvik的垃圾收集器不尊重SoftReferences并尽快删除它们,就像WeakReferences一样。我还不是100%确定,但尽管事实上仍有大约3MB的可用内存,但在我在LogCat中看到“GCfreedbla-bla-blabytes”后,我的SoftReferences被清除了。此外,我还看到了MarkMurphy的评论here:Exceptthatitdoesn'tworkonAndroid,atleastinthe1.5timeframe.IhavenoideaiftheGCSoftReferencebugshavebeenfixed.SoftReference

java - 在实践中,JVM如何收集SoftReferences?

我有两个单独的缓存在JVM中运行(一个由第三方库控制),每个缓存都使用软引用。我希望JVM在库控制的缓存之前先清除受控的缓存。SoftReferencejavadoc指出:Allsoftreferencestosoftly-reachableobjectsareguaranteedtohavebeenclearedbeforethevirtualmachinethrowsanOutOfMemoryError.Otherwisenoconstraintsareplaceduponthetimeatwhichasoftreferencewillbeclearedortheorderinwh