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