gpt4 book ai didi

Java:强/软/弱/幻像引用之间的区别

转载 作者:行者123 更新时间:2023-12-01 16:15:17 28 4
gpt4 key购买 nike

我已阅读this article关于Java中不同类型的引用(强引用、软引用、弱引用、幻像引用),但我不太理解。

这些引用类型之间有什么区别?每种类型何时使用?

最佳答案

Java 提供了两种不同类型/类的引用对象:。弱引用对象可以进一步分为幻像

    • 幻影

让我们逐点讨论。

强引用对象

StringBuilder builder = new StringBuilder();

如果没有不同指定,这是引用对象的默认类型/类:builder是一个强引用对象。这种引用使得被引用的对象不符合GC的条件。也就是说,每当一个对象被强引用对象链引用时,它就无法被垃圾收集。

弱引用对象

WeakReference<StringBuilder> weakBuilder = new WeakReference<StringBuilder>(builder);

弱引用对象不是引用对象的默认类型/类,要使用它们,应该像上面的示例一样显式指定。这种引用使得引用对象有资格进行GC。也就是说,如果唯一的引用可达 StringBuilder内存中的对象实际上是弱引用,那么允许GC进行垃圾收集StringBuilder目的。当内存中的对象只能通过弱引用对象访问时,它会自动符合 GC 的条件。

弱点程度

可以列出两种不同级别的弱点:幻象

引用对象基本上是一个弱引用对象,会在内存中保留更多一点:通常,它会抵抗 GC 循环,直到没有可用内存为止,并且存在 OutOfMemoryError 的风险(在这种情况下,可以将其删除)。

另一方面,幻影引用对象仅在准确了解对象何时已从内存中有效删除时有用:通常它们用于修复奇怪的 Finalize() 复活/复活行为,因为它们实际上不返回对象本身,而只是帮助 in keeping track of their memory presence .

弱引用对象是实现缓存模块的理想选择。事实上,只要强引用链无法再访问对象/值,就可以通过允许 GC 清理内存区域来实现某种自动逐出。一个例子是 WeakHashMap保留弱 key 。

关于Java:强/软/弱/幻像引用之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62411692/

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