-4

我正在阅读有关垃圾收集器的信息。我想知道垃圾收集器在面向对象编程中的用途是什么?我们也可以手动删除对象而不是垃圾收集器。然后我们有垃圾收集器的一代,它具有 N、N+1、N+2 的角蛋白水平。他们真的那么重要吗?

4

5 回答 5

6

垃圾收集与面向对象编程无关。

C# 是一种托管语言。这意味着开发人员无需担心(至少不应该担心)内存管理。这就是垃圾收集器如此重要的原因。

于 2012-10-11T18:37:17.530 回答
3

我们也可以手动删除对象而不是垃圾收集器

是的,我们可以——但它可能会给我们带来以下严重麻烦:

  1. 内存泄漏
  2. 悬空指针

GC 的使用通常会显着减少开发时间,但是在使用它时 - 我们会遭受一些性能损失,尤其是在延迟方面。

于 2012-10-11T18:37:28.270 回答
0

除非您正在编写unsafe代码,否则您不会在 C# 中释放内存。

于 2012-10-11T18:39:36.503 回答
0

垃圾收集器和面向对象编程是完全不同的概念。您可能会混淆它们,因为许多 OOP 语言都实现了某种形式的垃圾收集器。

垃圾收集是清理未使用资源的过程 - 意味着超出范围的对象等。它允许程序员(在大多数情况下)不必担心自己进行清理。

C# 是一种托管语言 - 这意味着它实现了垃圾收集器等。

于 2012-10-11T18:42:56.623 回答
0

这两个概念完全不相关。

你可以拥有一个而不是另一个。您可以使用垃圾收集语言删除对象,但无法回收内存。这是我使用过的所有语言中垃圾收集器的职责

为了证明它们是完全不同的概念,这里有一个带有/不带有 oop/gc 的语言的简短列表:

垃圾收集器和面向对象:

  • C#
  • 爪哇
  • 无数人

面向对象,但不是垃圾收集:

  • C++

垃圾收集但不是面向对象:

  • JavaScript*

既不收集垃圾,也不面向对象:

  • C

*虽然 JavaScript 有对象,但它不像 C++ 和 Java 那样面向对象。我将其称为基于原型的语言而不是面向对象的语言。

于 2012-10-11T18:44:58.047 回答