首页 > 代码库 > 20、?内存溢出(Out of Memory)

20、?内存溢出(Out of Memory)

? 内存引用(释放强引用)

Object obj=new Object();

obj = null; 

? 内存引用(使用软引用

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

20、?内存溢出(Out of Memory)