有没有一个办法让Android启动GC

发布于 2022-08-24 02:36:12 字数 113 浏览 28 评论 0

被oom搞疯了。。。recycle什么的貌似不能把内存马上释放
System.gc(); 好像也不行。。。
有没有什么办法让系统迅速启动GC,释放内存?
求内存管理的一些技巧啊

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你曾走过我的故事 2022-08-31 02:36:12

那个方法并不能即时开启内存清理,况且你还不能确定你想回收的对象是不是已经没引用了,如果有引用在,即时系统gc了,你的对象也不会被回收掉。
Bitmap对象分为java虚拟机上的内存和linux里的内存,真正的内存大户在linux上分配的部分,那里保存了图像的点阵信息。然后虚拟机里的引用主要保存图像大小等等Bitmap对象的大部分域(属性)。

recycle()方法也是通知虚拟机,该对象可以被回收,但是如果这个对象有被引用,那么无效的。
如果是Bitmap对象,那么你要确认这个对象没有在别的地方调用了,然后调用recycle之后null。但是如果你这个bitmap被控件引用,那么就要做一些处理。

Drawable d = view.getBackground();
// 如果是一个BitmapDrawable
Bitmap b = ((BitmapDrawable) d).getBitmap();

if (null != b && !b.isRecycle()) {
    b.recycle();
    b = null;
}
d.setBitmap(null);
d.setCallback(null);
魔法唧唧 2022-08-31 02:36:12

你确定

System.gc()

不行?是不是没有在正确的地方gc?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文