OOM(内存溢出)解决方案

一、内存引用

  软引用是主要用于内存敏感的高速缓存。在jvm报告内存不足之前会清除所有的软引用,这样以来gc就有可能收集软可及的对象,可能解决内存
吃紧问题,避免内存溢出。什么时候会被收集取决于gc的算法和gc运行时可用内存的大小。
软引用即使没有被引用,也不会释放,直到虚拟机报告内存不够才回收,所以适合做Cache。

String abc = “aaa”;
SoftReference<String> abcSoft=new SoftReference<String>(abc);

二、图像处理

gc收集弱可及对象的执行过程和软可及一样,只是gc不会根据内存情况来决定是不是收集该对象。如果你希望能随时取得某对象的信息,但又不
想影响此对象的垃圾收集,那么你应该用 Weak Reference 来记住此对象,而不是用一般的 reference。


String abc = “aaa”;
WeakReference<String> abcWea = new WeakReference<String>(abc); 

Options bitmapFactoryOptions = new BitmapFactory.Options(); 
bitmapFactoryOptions.inSampleSize = 2; 
bmap = BitmapFactory.decodeFile(picture.getAbsolutePath(), 
bitmapFactoryOptions); 

if(bitmapObject.isRecycled()==false) //如果没有回收
{
bitmapObject.recycle();
system.gc() //提醒系统及时回收
}


三、VMRuntime

private final static floatTARGET_HEAP_UTILIZATION = 0.75f; 
VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTIL
IZATION); 
private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ; 
//设置最小heap内存为6MB大小
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);

从Android2.3以后,VMRuntime不再提供,不过Google表示以后可能会提
供VMRuntime。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值