2

可能重复:
Java 垃圾收集

我知道我们必须在处理完成后释放 C、C++ 中的对象以取回内存。但是,我不知道如何在 java 和 android 中释放对象。null仅分配给对象就足够了吗?

4

5 回答 5

4

在 Java 中,不需要释放对象。

Java 有一个内置的垃圾收集器,它在需要时运行并清除所有不再使用的资源以释放内存。java 开发人员可能会调用 java 运行时来运行垃圾收集器,System.gc();但这只是对运行时的建议,可能并不总是会导致它运行。

如果您使用阅读器和图像,请务必致电.recycle().close()在适用的情况下致电。

于 2012-12-24T03:31:55.550 回答
3

如果其他对象没有引用它,垃圾收集器可以释放一个简单的 java 对象(例如模型对象) 。

如果我是你,不要太相信垃圾收集器,因为有些对象是你必须释放的,其中之一就是Bitmap对象

Bitmap在你的安卓应用程序中吃更多的内存。

Bitmap b = createLargeBitmap();
Bitmap b2 = b;

如果您删除对该对象的所有引用并让垃圾收集器将其杀死

b = null;
b2 = null;

您可能会遇到内存泄漏或OutOfMemory错误。

所以你需要调用recycle()来完全释放位图。

b.recycle();
b = null;
b2 = null;

// 抱歉我的语法错误 :)

于 2012-12-24T03:49:48.220 回答
2

在大多数情况下,将 var 设置为 null 就足够了。回答您的问题的一个更好的答案是如何泄漏内存,这在这篇文章中有详细说明。

于 2012-12-24T03:31:43.403 回答
1

内存释放由 Java 垃圾收集器自动完成。您不能强制垃圾收集器通过您的代码释放内存。

调用System.gc()不保证垃圾收集器运行并释放内存,最终决定由 Java 运行时决定。

于 2012-12-24T03:32:03.857 回答
0

Android(使用 Java 语言)是一个垃圾收集环境,这意味着虚拟机将自动删除不再有任何引用的对象。

因此,您应该问的问题是:如何确保您的程序不使用太多内存。这通常是通过确保不要在内存数据结构中放置太多对象、将信息保存到文件系统等来实现的。

于 2012-12-24T03:49:49.250 回答