问题标签 [soft-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.
java - Soft-/Weak-/PhantomReferences 清除对已引用跟踪对象的对象的引用的基本原理
Soft
-、Weak
- 和s的文档PhantomReference
都包含与以下类似的行(取自PhantomReference
):
那时,它将自动清除对该对象的所有幻像引用以及对该对象可从中访问的任何其他幻像可访问对象的所有幻像引用。
让我困惑的部分是关于其他幻影可到达对象的部分。
如果我理解正确,这描述了这种情况:
对象:
- 一个
- 乙
参考:
->
: 强参考-P->
: 幻影参考
所以由于某种原因,垃圾收集器还没有确定这B
只是幻象可达的。现在,如果A
变为幻像可达并且垃圾收集器检测到这一点,则需要(根据上面引用的文档)也清除对B
.
文档有什么要求吗?如果其他供应商要开发 JVM,这似乎是一个相当大的负担。
java - PDFBox 渲染图像缺少内容
在使用 PDFBox 时,我们会遇到一个问题,即如果我们调用render
PDDocument,它有时会丢失内容,例如字体或某些形状。
深入研究后,它看起来是由SoftReference
整个 PDFBox 代码库的使用引起的。JVM 在尝试渲染图像时似乎获取了 PDDocument 的底层内容。结果,我们org.apache.pdfbox.cos.COSDocument - Warning: You did not close a PDF Document
以随机间隔看到。
有没有其他人遇到过这个问题?如果是这样,它是如何解决的?到目前为止,我们的解决方案是将内容写入文件,然后读取和渲染。
java - Java 软引用优先级
我有一个应用程序,它有几个非常大的数据块,需要很长时间来计算。我将它们中的每一个都保存为 SoftReference,因为我可以重新计算它们,但这需要很长时间。所以只要我有足够的内存,我就想重用我已经计算过的东西。这正是 Java SoftReference 的用途。
但是,我真正想做的是对这些数据块进行排名,因为有些数据块更重要,计算时间比其他数据块要长得多,所以我想让垃圾收集器最后收集这些数据。
我不想要将这些块写入磁盘的解决方案。我知道该怎么做。我只想能够在我的软引用上设置垃圾收集的顺序/优先级。
java - 当您丢弃对 SoftReference 的引用时,它是否仍会被清除到 ReferenceQueue 上?
我想了解垃圾收集器在什么情况下会通知您清除软引用。文档清楚地说明了当可能发生 OOM 时会发生这种情况,但是如果您完全丢弃引用怎么办,GC 会出现并收集 SoftReference 可能会注意到不存在其他强/软引用并清除内部引用值。
那么这个队列的规则记录在哪里呢?必须有比我要问的更多的极端案例,所以也许这个问题必须扩大一点。
java - WeakReference 的罕见用法?
我有一个类,其实例由底层平面格式初始化和使用。
没有错,我认为我需要添加一些静态方法以用作方法引用。
仍然没有任何问题(我相信),我不喜欢instance
上课的坚持,这就是我尝试这样做的原因。
我基本上什至不知道如何测试这段代码。我很抱歉我的问题可能有些含糊。
- 这是一种(正确/错误)方法吗?
reference.get()
成语里面有没有function.apply
可能null
?- 有没有可能出现内存泄漏等问题?
- 我应该依靠
SoftReference
而不是WeakReference
?
谢谢你。
java - 如何确定java中的引用可达性
Java中,在引用链等一些复杂情况下,如何判断引用可达性?
假设在下面的示例中,str
是软件引用的引用sr
,并且sr
是弱引用的引用wr
。
那么在这种情况下,什么是可达性str
?根据Java doc:An object is softly reachable if it is not strongly reachable but can be reached by traversing a soft reference.
在这种情况下,str
可以通过遍历wr
andsr
来访问,这意味着遍历会通过软引用。我可以说str
是轻而易举的吗?但是在本文档中的参考对象链部分之后,似乎很难达到。str
java - 没有垃圾收集器有时间收集 SoftReference,总是 OutOfMemoryError
尝试了所有垃圾收集器,一百万种不同的设置组合。但结果总是一样的——OutOfMemoryError。
谁能告诉哪个垃圾收集器能够及时删除软引用引用的对象
下面的示例模拟器代码