可能重复:
Java 垃圾收集
我知道我们必须在处理完成后释放 C、C++ 中的对象以取回内存。但是,我不知道如何在 java 和 android 中释放对象。null
仅分配给对象就足够了吗?
在 Java 中,不需要释放对象。
Java 有一个内置的垃圾收集器,它在需要时运行并清除所有不再使用的资源以释放内存。java 开发人员可能会调用 java 运行时来运行垃圾收集器,System.gc();
但这只是对运行时的建议,可能并不总是会导致它运行。
如果您使用阅读器和图像,请务必致电.recycle()
并.close()
在适用的情况下致电。
如果其他对象没有引用它,垃圾收集器可以释放一个简单的 java 对象(例如模型对象) 。
如果我是你,不要太相信垃圾收集器,因为有些对象是你必须释放的,其中之一就是Bitmap
对象
Bitmap
在你的安卓应用程序中吃更多的内存。
Bitmap b = createLargeBitmap();
Bitmap b2 = b;
如果您删除对该对象的所有引用并让垃圾收集器将其杀死
b = null;
b2 = null;
您可能会遇到内存泄漏或OutOfMemory
错误。
所以你需要调用recycle()
来完全释放位图。
b.recycle();
b = null;
b2 = null;
// 抱歉我的语法错误 :)
在大多数情况下,将 var 设置为 null 就足够了。回答您的问题的一个更好的答案是如何泄漏内存,这在这篇文章中有详细说明。
内存释放由 Java 垃圾收集器自动完成。您不能强制垃圾收集器通过您的代码释放内存。
调用System.gc()
不保证垃圾收集器运行并释放内存,最终决定由 Java 运行时决定。
Android(使用 Java 语言)是一个垃圾收集环境,这意味着虚拟机将自动删除不再有任何引用的对象。
因此,您应该问的问题是:如何确保您的程序不使用太多内存。这通常是通过确保不要在内存数据结构中放置太多对象、将信息保存到文件系统等来实现的。