当前位置: 首页 > 知识库问答 >
问题:

为什么要调用GC。坚持到底,而不是一开始?[副本]

楚彦
2023-03-14

GC。MSDN上的KeepAlive()

在obj必须可用的指令范围的末尾而不是开始处编写此方法

为什么它会有如此不直观的行为?

共有1个答案

计阳泽
2023-03-14

因为从技术上讲,JIT和CLI可以确定在那个点之后没有使用该值,并考虑可用于收集的对象。见鬼,编译器可能会决定完全删除变量,并在最后一次使用后将其从堆栈中“弹出”。

注意,GC。KeepAlive实际上什么都不做。这是一种不透明的无操作方法。关键是,如果您使用对象作为参数调用不透明方法,那么该对象仍然需要存在,即可访问,即不可收集。

以下是实现KeepAlive的方式(删除了一些不感兴趣的属性):

[MethodImpl(MethodImplOptions.NoInlining)]
public static void KeepAlive(object obj)
{
}

 类似资料:
  • 本文向大家介绍GC是什么? 为什么要有GC?相关面试题,主要包含被问及GC是什么? 为什么要有GC?时的应答技巧和注意事项,需要的朋友参考一下 答 GC(Garbage Collection) GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: 当程序需要更多的堆空间时,GC需要进行垃圾清理工作,暂停所有线程,找出所有无被引用的对象,进

  • 我知道是“最高的SDK版本,您的应用程序已知可以使用”,但这有什么意义呢?我设置了22,我的应用程序在API25设备上运行良好。这不是为了防止在更多的api版本上安装吗?如果不是,那又是为了什么呢?

  • 本文向大家介绍请问GC是什么? 还有为什么要有GC?相关面试题,主要包含被问及请问GC是什么? 还有为什么要有GC?时的应答技巧和注意事项,需要的朋友参考一下 考察点:回收 GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存

  • 问题内容: 我不确定为什么列出项目时为什么需要使用ul-li而不是简单地使用div。我可以使两者看起来完全一样,因此与创建div相比,创建无序列表的功能优势在哪里? 问题答案: 为了语义正确。HTML具有表达事物列表的功能,它可以帮助Google机器人,屏幕阅读器以及所有不仅仅关心网站外观的用户更好地了解您的内容。

  • 我有什么理由使用 而不是 输出应该是相同的,我所做的基准测试似乎表明稍微快一点(需要评估所有非标准评估输入)。 那么,对于如此简单的情况,有什么理由让我考虑切换到< code>purrr::map呢?我在这里不是问你喜欢或不喜欢purrr提供的语法和其他功能。,但严格来说是关于< code>purrr::map与< code>lapply的比较,假设使用标准评估,即< code>map(

  • 我非常熟悉这个框架,从一开始我就喜欢它。 有一件事我还不能完全理解,那就是为什么打字有时会中断。 特别是对于这个问题,,我不确定为什么没有使用,起初我认为可能是int32/int16/float等之间的行为差异。。但(对我来说)这在透明化中是没有意义的。 因此,从lib来看,它需要很好地处理数学问题。 我的问题是关于语义的,为什么决定使用而不是?