84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
被oom搞疯了。。。recycle什么的貌似不能把内存马上释放 System.gc(); 好像也不行。。。 有没有什么办法让系统迅速启动GC,释放内存? 求内存管理的一些技巧啊
那个方法并不能即时开启内存清理,况且你还不能确定你想回收的对象是不是已经没引用了,如果有引用在,即时系统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);
你确定
System.gc()
不行?是不是没有在正确的地方gc?
那个方法并不能即时开启内存清理,况且你还不能确定你想回收的对象是不是已经没引用了,如果有引用在,即时系统gc了,你的对象也不会被回收掉。
Bitmap对象分为java虚拟机上的内存和linux里的内存,真正的内存大户在linux上分配的部分,那里保存了图像的点阵信息。然后虚拟机里的引用主要保存图像大小等等Bitmap对象的大部分域(属性)。
recycle()方法也是通知虚拟机,该对象可以被回收,但是如果这个对象有被引用,那么无效的。
如果是Bitmap对象,那么你要确认这个对象没有在别的地方调用了,然后调用recycle之后null。但是如果你这个bitmap被控件引用,那么就要做一些处理。
你确定
不行?是不是没有在正确的地方gc?