PS,1880后程序员

看不完的牙,写不完的程序,跑不完的步。
随笔 - 97, 文章 - 34, 评论 - 10, 引用 - 0
数据加载中……

内存泄漏 - 开篇 数据库应用

最近都在读那个该死的猪小弟写的代码,原因还不是因为压力测试后,发现TMD的内存泄漏啦!
边看代码边在心中鄙视这个猪小弟,该死的猪小弟,说你比猪笨,猪觉得这是对自己的侮辱都不乐意,
很多心得哦,慢慢整理出来。
先说说JDBC吧。
不关闭Connection
这是最常见的错误,数据库增删改操作后,没有关闭数据库连接,导致占用大量内存,如果是用连接池,那么系统很快就木有可用的数据库连接了;如果是直接连接数据库,很快系统内存就耗尽了,要知道数据库连接很费资源的,否则要连接池干吗?而且这种错误很难查,一个系统上百个DB操作,就一个没关闭,惨了!
不关闭Statement,ResultSet
这是另一种错误,数据库连接关闭了,但是Statement,ResultSet没关闭。谁说的关闭了数据库连接其它就不用关闭的。只关闭连接,那些Statement,ResultSet就如同孤坟野鬼一样占据你的Heap,而且还是阴魂不散的说,最后系统耗尽内存气绝身亡。
频繁数据库连接
大多数业务系统,一个业务操作可能会关联多张表的增删改。麻烦不要每操作一张表,就请求一次数据库连接。麻烦把请求数据库连接看做是请你学妹吃饭好不好,小学妹很矜持,请一次也不容易。这样想,你请求数据库连接时,就会谨慎些,尽可能一次数据库连接,对多张表进行操作。
经验
不要把代码写成connection.close(); 或者 datasource.getConnection();把他们都封装到工具类里面,这样测试的时候加进去debug代码,很容易就找到那个该死的连接没有关闭了。Statement, ResultSet也是这样。

最后,猪小弟是谁?
呵呵,猪小弟是5年前的我,或者是8年前的我。当年,年幼无知,无知者无畏,犯下无数的错误,感谢老板,感谢客户,你们太有牺牲精神了。

posted on 2013-01-18 11:14 amenglai 阅读(233) 评论(0)  编辑  收藏 所属分类: 我爱内存泄露


只有注册用户登录后才能发表评论。


网站导航: