小弟遇到了一个奇怪的问题
在处理png图片的时候
我用到了ImageConsumer中的setPixels和imageComplete等相关的函数。
我的png图片每个大概4-5k
但是当程序每次运行到setPixels函数的时候都会让applet所占内存增长3-4m左右
而且每次运行到imageComplete函数的时候又会增长5m左右的内存。
这样下去没过几次内存就溢出了。
求教各位大虾,原因为何?
万分感谢。在线求解!
8 个解决方案
#1
学习,帮顶。
#2
图片计算插值是比较费内存的,唯一的做法就是用完这个Image对象之后及时释放掉。
#3
UP
#4
我觉得这就是问题所在,要像黑瞎子掰棒子一样释放内存。
#5
可是我在 ic.imageComplete(error ? 1 : 3); 之后尝试释放内存了
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
#6
可是我在 ic.imageComplete(error ? 1 : 3); 之后尝试释放内存了
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
#7
System.gc();
只是申请回收,GC未必真会去管你,如果他认为值得回收才会去弄;
只是申请回收,GC未必真会去管你,如果他认为值得回收才会去弄;
#8
尝试用一些软引用,这样堆栈溢出前就会由GC回收,或者是用虚引用,这样运行GC就会回收。自己做选择好了。
#1
学习,帮顶。
#2
图片计算插值是比较费内存的,唯一的做法就是用完这个Image对象之后及时释放掉。
#3
UP
#4
我觉得这就是问题所在,要像黑瞎子掰棒子一样释放内存。
#5
可是我在 ic.imageComplete(error ? 1 : 3); 之后尝试释放内存了
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
#6
可是我在 ic.imageComplete(error ? 1 : 3); 之后尝试释放内存了
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
但是没有效果~
removeConsumer(ic);
theConsumers.removeElement(ic);
ic = null;
System.gc();
请指教!
万分感谢~!
#7
System.gc();
只是申请回收,GC未必真会去管你,如果他认为值得回收才会去弄;
只是申请回收,GC未必真会去管你,如果他认为值得回收才会去弄;
#8
尝试用一些软引用,这样堆栈溢出前就会由GC回收,或者是用虚引用,这样运行GC就会回收。自己做选择好了。