android 强制释放对象,Android手动解除分配对象

我已经阅读了Android的设计性能开发者指南.

我只是想知道,如果我有一个大的对象,我无法避免创建(这是昂贵的),当我知道我已经完成它时,我想立即解除分配似乎是合乎逻辑的.

似乎没有办法做到这一点.

有人建议将其设置为null,以便系统立即使用GC,这是否真的“立即”?因为如果系统(Dalvik VM)可以选择不释放我刚设置为null的大对象,那么将它设置为null根本不是解决方案.

将它设置为null是否可以激励和加速GC是否正确?

这种方法是一种“足够好”的方式来优化Apps性能吗?或者是否值得加倍努力(如果可能的话),强制GC适用于任何Android设备的最佳性能?

解决方法:

执行GC时我不认为你应该担心细粒度的细节,因为我们无法控制何时调用gc.即使调用gc()也不能保证集合.来自System.gc()的每个文档

Indicates to the virtual machine that it would be a good time to run the garbage collector. Note that this is a hint only. There is no guarantee that the garbage collector will actually be run.

在开发具有大对象分配的应用程序时,我会担心以下情况:

>在分配大对象后,在退出该对象的生命周期范围后,我是否会在以后的活动中看到它被GC回收?通过使用adb shell运行dumpsys meminfo可以轻松检查这一点.你基本上在重新分配后进行检查,如果内存是正确的垃圾收集,通常表示大穗和后来丢弃

>检查此大对象是否有明确的GC路径.您可以通过转储hprof来检查此对象的引用路径并在Memory Analyzer中进行检查.如果确实如此,那么您就很安全,因为GC足够聪明,可以收集.

>在我分配这个大对象后,我的堆中是否有足够的填充来执行后续活动?如果对象太大,GC有可能没有足够的速度来收集它(这实际上与你的观点有关),后续活动的内存消耗加上前一个活动的剩余可能实际上导致了记忆错误.使用GC的清除路径设置null将有助于确保此对象适当地获得GC.我承认这是一个问题,但我的观点是,如果这成为一个问题,我们可能不得不重新审视这个特定部分是如何设计的,看看我们是否可以对它进行任何优化.

>根据需要通过onDestroy实现对活动的清理,并确保其他人不引用活动,以便可以正确地收集垃圾.例如:我们经常传递活动上下文,忘记它将保留其引用.在位图上调用recycle()之类的东西也应该有所帮助.记住这些要点应该有助于在#3发生的情况下准备更多的空间

标签:android,memory,allocation

来源: https://codeday.me/bug/20190826/1733972.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值