java图片浏览内存释放问题

diggywang 2006-08-08 03:10:47
因项目需要,自己用java swing写了个图片浏览程序,在不停地浏览或缩放时,内存只会上升而不会下降,直到最后抛出OutOfMemoryError。不知这里有没有人碰到过类似的问题,怎么在程序中释放内存?XP中的image & fax viewer,每次浏览只会增加图片大小的内存,显示完毕后就马上将那点内存释放掉。java中有类似的方法吗?解决立马给分!
...全文
620 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
diggywang 2006-08-23
  • 打赏
  • 举报
回复
是啊,System.gc()不是强制性的。用了mantaihu说的Reference,也没看出什么大的变化,你也可以试试
千里冰封820 2006-08-22
  • 打赏
  • 举报
回复
经过实践,发现先把图片全部以二进制流的方式读入内存,这个时候是不占什么内存的,也就是它图片多大,就占多少内存,然后当你想用Image对象的时候,你就用二进制流对象来构造一个对象,要用就构造,不用就释放,这样对内存会好一些
不过,这样做也有一个不好的地方,那就是,很占CPU的资源
千里冰封820 2006-08-22
  • 打赏
  • 举报
回复
释放确实是一件很麻烦的事,我是这样做的
构造好了一张以后,把上张图片的引用设为null,然后显示的调用System.gc(),这样一般是可以收集垃圾的,但是还是不能确定,我就试过我同样的程序,在有些电脑上要吃60M内存
在有些电脑上却要吃掉90多M
diggywang 2006-08-22
  • 打赏
  • 举报
回复
问题是怎样来释放,java不像c,很难控制的。
我同事也用二进制流方式处理,但是效果依然不大...
lbfhappy(千里冰封)有没有实际的例子,拿出来讨论一下?
mantaihu 2006-08-21
  • 打赏
  • 举报
回复
肯定是和new Image()有关了,但怎么样才能消除这影响呢?
追求自由 2006-08-19
  • 打赏
  • 举报
回复
哪应该与new Image的实现有关了
千里冰封820 2006-08-18
  • 打赏
  • 举报
回复
JAVA为什么会升这么多的内存,我也深有体会
我导入大的图片时,JAVA的内存会多很多,像我把几十张图片一起导入,这些图片加起来只有2M左右,但是在JAVA里,却要用掉120M的内存,挺奇怪的,不知道JAVA的图片管理是怎么实现的.
怎么会这么耗内存呢?
diggywang 2006-08-18
  • 打赏
  • 举报
回复
缩放是没问题的,也是次要的,现在主要关心的是图片导入的瞬间以及导入后内存的变化。比方说,一个2M左右的jpg图片(一般数码相机拍出来的都这般大了),用new Image(图片)时,执行到这一步内存就彪升,起码要大30M左右,相反,看看Windows Image&Fax Viewer或者Acdsee,导入2M的jpg图片时内存变化也就升2M左右,而且一旦导入完毕,内存就会释放掉。我想知道的是,java也能不能实现类似的效果?
chenweionline 2006-08-16
  • 打赏
  • 举报
回复
其实我觉得 JAVA 2D 还是很好用的,还是看你怎么用了。方法不对,换一个开发平台还是会有类似的问题。
chenweionline 2006-08-16
  • 打赏
  • 举报
回复
我认为lz的方法不对,我的实现是根据当前的缩放比例,计算出原图在画布上显示的区域,然后只绘制显示的区域。画布可以是一个JPanel,要注意的是无论缩放比例是多大,画布的尺寸都是不变的,你需要做的是计算出当前的缩放比例和固定的画布尺寸下,原图显示的区域,然后只绘制这部分区域。进行缩放操作时也不是真的缩放原图,而是在绘制时缩放那块显示区域,这样可以提高速度又不会有内存的问题了。
千里冰封820 2006-08-15
  • 打赏
  • 举报
回复
我在处理图片问题上也会经常出现异常,好像JAVA对图片的处理就是显示心有余而力不足了些
能不能用别的方法来做图片处理呢,比如JAI
mantaihu 2006-08-15
  • 打赏
  • 举报
回复
一般java使用Reference对象就可以释放内存,如SoftReference或WeakRefernce等,具体看javadoc,但这并不像C那样可以随意释放,最终还是得看jvm处理。
如果这个处理不好,只有调高jvm内存参数了...
高手呢?给点正解吧...
gaolch 2006-08-15
  • 打赏
  • 举报
回复
现在内存好便宜,买上几十G吧
diggywang 2006-08-15
  • 打赏
  • 举报
回复
sourceforge上的jimageview就是用jai的,我使用了一下,也不行
zhmt 2006-08-11
  • 打赏
  • 举报
回复
up!

mark!


fishyqd 2006-08-11
  • 打赏
  • 举报
回复
mark 学习
randaliang 2006-08-10
  • 打赏
  • 举报
回复
up
quanquan626 2006-08-10
  • 打赏
  • 举报
回复
up
RobertHooke 2006-08-09
  • 打赏
  • 举报
回复
用ClassLoader,用完了就及时释放
  • 打赏
  • 举报
回复
调高虚拟机参数是应该的

但吃内存的样子,按楼主所说,似乎也过了些.
查查英语的资料吧
加载更多回复(6)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧