现在的位置: 首页 > 综合 > 正文

OOM(内存溢出)解决方案

2018年02月17日 ⁄ 综合 ⁄ 共 1005字 ⁄ 字号 评论关闭

一、内存引用

  软引用是主要用于内存敏感的高速缓存。在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。

【上篇】
【下篇】

抱歉!评论已关闭.