language-agnostic - 垃圾收集可以与显式内存管理共存吗?

标签 language-agnostic garbage-collection computer-science theory

例如,假设在 C# 4 中包含一个“delete”关键字。由于基于引用的系统,是否可以保证您永远不会有野指针,但仍然能够依赖垃圾收集器?

我看到它可能发生的唯一方法是,如果不是对内存位置的引用,而是引用将是指向实际对象的指针表的索引。但是,我确信在某些情况下会中断,并且可能会中断类型安全/具有悬空指针。

编辑:我不是在谈论.net。我只是以 C# 为例。

最佳答案

你可以 - 有点:让你的对象一次性,然后自己处理。

手动删除不太可能提高托管环境中的内存性能。它可能对非托管资源有所帮助,dispose 就是这样。

我宁愿更容易实现和使用 Disposable 对象。我不知道这应该是什么样子的,但在 .NET 下管理非托管资源是一个冗长的痛苦。

实现删除的一个想法:
delete 标记一个用于手动删除的对象。在下一个垃圾回收周期中,该对象将被移除,并且对其的所有引用都设置为 null。

起初听起来很酷(至少对我而言),但我怀疑它是否有用。
这也不是特别安全 - 例如另一个线程可能正忙于执行该对象的成员方法,这样的方法需要抛出例如访问对象数据时。

关于language-agnostic - 垃圾收集可以与显式内存管理共存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/236290/

相关文章:

java - 分页对垃圾回收有什么影响?

computer-science - 顶点覆盖 vs 支配集

.net - 如何确定 .NET 4 中当前的垃圾收集器模式是什么?

javascript - 如果没有连接到 DOM,JS 会删除带有事件监听器的动态创建的元素吗?

language-agnostic - 在给定文本中发现 "templates"?

java - 这是对 try/finally 的滥用吗?

math - 哪里是复习数学的好地方?

algorithm - 冒泡排序中执行的平均交换次数

language-agnostic - Code Golf : Piano

path - 路径组件的命名标准是什么?