您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

垃圾收集之前是否清除了内存?

垃圾收集之前是否清除了内存?

实际上,不,这不会发生。覆盖刚刚释放的内存需要花费时间,因此会有性能损失。“安全”之类的物体SecureString的只是擦自己,而不是依靠GC。

更广泛地讲,它在很大程度上取决于该特定语言的特定实现。每种假定存在GC的语言(例如C#)都指定了有关如何以及何时进行垃圾回收的不同规则。

以您的C#为例,C#规范不要求对象在被释放后被覆盖,并且也不禁止它:

最终,在对象符合收集条件的某个时候,垃圾收集器释放了与该对象关联的内存。

§3.9C#5.0语言规范

如果以后将内存分配给引用类型,则将有一个构造函数来执行您自己的自定义初始化。如果以后将内存分配给值类型,则将其清零,然后才能开始从中读取:

初始化为认值通常是通过在分配内存之前让内存管理器或垃圾收集器将内存初始化为全零位来完成的。因此,使用全零位来表示空引用很方便。

§5.2C#5.0语言规范

另外,至少有两个C#实现-微软的实现和Mono的实现,因此仅说“ C#”还不够具体。每个实现可能决定覆盖内存(或不覆盖)。

其他 2022/1/1 18:32:14 有562人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶