【发布时间】: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