【问题标题】:How should I properly FULLY delete an object? (C#, Objective-C, Java) [closed]我应该如何正确地完全删除一个对象? (C#、Objective-C、Java)[关闭]
【发布时间】:2014-06-19 14:50:12
【问题描述】:

我还没有找到或发现一个明确的答案。我不是在询问特定的语言,而是在谈论所有 OOP 语言。

如果我有一个对象,例如:

Object obj = new Instance();

假设我不再需要这个对象。当然,我可以简单地这样做:

obj = null;

但是,如果我错了,请纠正我,这只是意味着 obj 变量不再分配为“new Instance();”但并不意味着“new Instance();”不复存在。所以我的问题是:如何确保实例对象从系统中完全删除并且不再存在。我怎样才能完全确定实例不再存在?

我使用 Objective-C、Java 和 C# 进行编程,因此对于这些语言的回答会很好,因为我知道垃圾清理器在不同语言中的工作方式不同,而在某些语言中甚至不存在。

我知道您无法完全清除某些语言中的实例,但是用对象释放内存的最佳方法是什么?

非常感谢!

【问题讨论】:

  • 至少对于 Java 和 C#,你根本做不到。
  • 我不知道强制 Java 删除对象的方法。您可以在取消所有引用后调用 System.gc() ,但这是对 JVM 执行垃圾收集的建议,并且不能保证 GC 会在那时运行,或者它会从任何特定对象中回收内存。
  • @Sumitsu 有人告诉我 System.gc();使用起来可能非常危险,不推荐使用。您认为尝试释放更多内存更好,还是安全地使用它并远离它?
  • 在objective-c中,这取决于你是否使用ARC。如果你是,那么删除一个对象的所有强引用将立即释放它。
  • 这真的应该分成每种语言的问题。我不会接受任何不涵盖所有三种语言的答案。

标签: java c# objective-c garbage


【解决方案1】:

在 java 和 C# 中,您的垃圾收集器会处理这些问题,您可以或不应该做任何事情来回收该内存。

【讨论】:

  • Objective-c 不使用垃圾回收。
【解决方案2】:

正如其他人所说,从内存中删除对象本身是 Java 无法控制的。您唯一的要求是取消分配对该对象的所有引用,使其变为eligible 用于垃圾回收,但是当 GC 实际运行时既无法确定也无法可靠地保持一致。

您可以阅读System.gc() 调用,但应该完全避免它。

【讨论】:

  • 答案不完整。和objective-c的对比在哪里?
  • -1:对不起,Kon,但我不知道这怎么能成为公认的答案,因为您只谈论 Java,而没有回答 C# 和 Objective-C。
  • @LuiggiMendoza 据我了解,比较对 OP 是有益的,但不是必需的。我不会不同意您的反对意见,但我上面提供的信息很有帮助且准确,只是省略了我不知道的细节。
  • 我对 Java 中的 GC 有很好的了解,但这并不意味着我应该将其发布为答案,因为它没有解决 OP 的问题。事实上,这个问题太宽泛了,无法回答。
【解决方案3】:

如果您使用 C# 或 Java 进行编程,他们可以为您完成。我是用C#开发的,所以我可以谈谈,如果你想强制垃圾收集器为你删除未使用的对象,你可以调用System.GC.Collect()方法来帮助你。

【讨论】:

  • 使用自动释放池效果如何?
  • Objective-c 比这更复杂。你甚至没有提到 ARC。
  • delete obj;not有效的Objective-C。
  • 好吧,如果你这么说,我正在删除 obj-c 部分
猜你喜欢
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多