gpt4 book ai didi

java - 如何测试依赖于 SoftReference 的代码?

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:07 25 4
gpt4 key购买 nike

我有一些代码使用了 SoftReference 子类的许多实例。我想测试它在所有/只有一些/没有这些引用被暂存以在 ReferenceQueue 中清除的情况下是否正常工作。对于“无”的情况,这很简单:创建对对象的强引用,并保证保留软引用。但是,我将如何保证它们被清除?据我了解,System.gc() 只是请求运行垃圾收集器,即使它实际运行,它也可能决定不收集所有无法访问的对象...

此外,代码对性能非常关键,因此仅出于测试目的而更改它并不是一个好主意。 (添加不影响其他方法的仅测试方法很好,但要避免添加仅用于其他方法测试的路径)。

最佳答案

如果可以选择从测试中访问您的 SoftReference 实例,您可以通过直接在 SoftReference 实例上调用方法来模拟 GC 行为。

调用 SoftReference.clear() 将对应于清除引用的第一步。然后,您可以调用 SoftReference.enqueue() 将其排入引用队列,对应于 GC 在清除引用后 [一段时间] 执行的入队步骤。

SoftReferences 的子集上调用这些方法,您可以模拟只有一些引用已被清除并入队。

我真的认为上述方法值得推荐,因为您可以控制清除哪些引用,这在测试中是一件好事。

但是,如果您不能直接访问您的 SoftReferences,那么您只能通过分配内存来让 GC 清除它们。例如,如图 this问题及其答案。

关于java - 如何测试依赖于 SoftReference 的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com