2007-03-19
Java的OutOfMemoryError
关键字: OutOfMemoryErrorJava中不再需要关心Object(相对C++而言这的确省去了许多烦恼)生存期管理,因为我们有了垃圾收集器GC! 引入GC带来了效率,我们专心编写业务逻辑而不必随 时为内存管理问题担忧。不过,在Java中如果程序设计有误,对于简单的问题也会导致新问题出现,这就是OutOfMemoryError(简称OOM)。
举几个例子。
1. 文件上传类。由于没有考虑到大文件的情况,这个类在上传大文件时会抛OOM错误。原来代码中直接 new Byte[filesize]。一下子在堆上申请这么多内存能不出错吗?
2. 一个含有大量图形类的UI界面。每次刷新时都要把整个背景new ImageIcon,当界面为了显示级联关系非常多的N个图形时,这个ImageIcon的size非常之大,并且由于界面的repaint事件发生比较 频繁,以至于连续申请ImageIcon时导致OOM错误。
3. 执行一条SQL语句,从数据库查出32183条记录,返回一个长度32183的对象数组。由服务器(中间件)传回UI端,出现OOM。在反序列化的过程实 际上也是在new Object。关于反序列化及readObject请参阅effective in Java。
4. 考虑把界面上110万单元格(5667行,197列)的数据导出到EXCEL文件
通过配置Java Plugin 参数,我们的程序性能得以改善但不能解决OOM。但是多数情况下,OOM是因为我们忽视了问题的潜在规模。有时候也因为太简单太贪婪的代码(一次申请太多的内存)导致,再有就是无意识的内存泄漏问题
1. 生产者-消费者模型+内存池
2. 消除已确认的内存泄漏问题
3. 在设计和编程时就开始关注性能问题。
发表评论
- 浏览: 72094 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
基于MVC的Flex framework ...
这话怎么理解? 不过正如某人在演讲上指出的那样,要使用这些框架,了解Cairng ...
-- by 毕竟红尘 -
在HostMonster上部署rail ...
你这个文章就是屁话,骗点击的,看了还是不知道怎么做
-- by kokko -
基于MVC的Flex framework ...
千万不要用PUREMVC,它只适合做只有一个主界面的程序,如果你有弹出窗口它的m ...
-- by wangwanttt -
想起一个同事
不认识,不过他关于swing的blog很棒,可惜他好像离开了SUN?!所以也不更 ...
-- by eccojap -
想起一个同事
正是他,你认识他吗?适合自己,我不确定自己是否找到了。
-- by zerozone






评论排行榜