gpt4 book ai didi

c# - 为什么 .NET 不像 Java 那样既有 SoftReference 又有 WeakReference?

转载 作者:IT王子 更新时间:2023-10-29 04:52:32 26 4
gpt4 key购买 nike

我真的很喜欢弱引用。但我希望有一种方法可以告诉 CLR 您认为引用有多弱(例如,在 1 到 5 的范围内)。那太棒了。

Java 有 SoftReference、WeakReference,我相信还有第三种类型,称为“幻象引用”。那里有 3 个级别,GC 在决定该对象是否被砍掉时有不同的行为算法。

我正在考虑对 .NET 的 WeakReference 进行子类化(幸运的是,有点奇怪,它没有被密封)来制作一个基于到期计时器或其他东西的伪软引用。

最佳答案

我认为 NET 没有软引用的根本原因是因为它可以依赖具有虚拟内存的操作系统。 Java 进程必须指定其最大操作系统内存(例如使用 -Xmx128M),并且它从不占用超过该值的操作系统内存。而 NET 进程不断占用它需要的操作系统内存,当 RAM 耗尽时,操作系统会提供磁盘支持的虚拟内存。如果 NET 允许软引用,那么 NET 运行时将不知道何时释放它们,除非它深入操作系统以查看其内存是否实际上在磁盘上分页(一个讨厌的 OS/CLR 依赖性),或者它请求运行时指定最大进程内存占用量(例如,相当于 -Xmx)。我猜 Microsoft 不想将 -Xmx 添加到 NET,因为他们认为操作系统应该决定每个进程获得多少 RAM(通过选择将哪些虚拟内存页保存在 RAM 或磁盘上),并且不是过程本身。

关于c# - 为什么 .NET 不像 Java 那样既有 SoftReference 又有 WeakReference?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/324633/

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