社区
Java SE
帖子详情
java图片浏览内存释放问题
diggywang
2006-08-08 03:10:47
因项目需要,自己用java swing写了个图片浏览程序,在不停地浏览或缩放时,内存只会上升而不会下降,直到最后抛出OutOfMemoryError。不知这里有没有人碰到过类似的问题,怎么在程序中释放内存?XP中的image & fax viewer,每次浏览只会增加图片大小的内存,显示完毕后就马上将那点内存释放掉。java中有类似的方法吗?解决立马给分!
...全文
620
26
打赏
收藏
java图片浏览内存释放问题
因项目需要,自己用java swing写了个图片浏览程序,在不停地浏览或缩放时,内存只会上升而不会下降,直到最后抛出OutOfMemoryError。不知这里有没有人碰到过类似的问题,怎么在程序中释放内存?XP中的image & fax viewer,每次浏览只会增加图片大小的内存,显示完毕后就马上将那点内存释放掉。java中有类似的方法吗?解决立马给分!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,用完了就及时释放
碧海情天-赵亮
2006-08-09
打赏
举报
回复
调高虚拟机参数是应该的
但吃内存的样子,按楼主所说,似乎也过了些.
查查英语的资料吧
加载更多回复(6)
新版Android开发教程.rar
� 采用了对有限
内存
、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...
java
socket资源
释放
_
java
用Socket实现的远程桌面
浏览
内存
溢出
问题
用socket做长连接时,出现了
内存
溢出的错误。搞了4天的时间总算是搞定了。现总结下:1.socket一般分为短连接和长连接。长连接是一旦一个客户端登陆上服务器,其与服务器之间的连接就不关闭,不管他们之间进行了多少...
Java
内存
模型之JVM进阶
JVM是整个
Java
程序运行的母体,但是大部分的开发者并不清楚JVM的执行流程。...以及该使用的GC策略也不清楚,为此本课程专门针对于JVM的执行流程、
内存
分配、垃圾收集等机制进行了综合讲解。官方QQ群:612148723。
java
应用程序占用高
内存
_对
Java
应用程序中的
内存
问题
进行故障排除
java
应用程序占用高
内存
重要要点 解决
内存
问题
可能很棘手,但是正确的方法和正确的工具集可以大大简化此过程。
Java
HotSpot JVM可以报告几种OutOfMemoryError消息,因此务必清楚地理解这些错误消息,并且在...
[js][
内存
泄露][
内存
回收][
内存
释放
]avascript的
内存
释放
实验
我以前也看过关于
java
script的
内存
释放
的文章,但我从来也没仔细看过。原因:一来我觉得这个东西可有可无,二来,鬼知道这些理论到底有没有科学根据? 今天我做了一个小小的实验,证实
内存
释放
还是有用的。 ...
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章