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 閱讀(263) 評論(0)  編輯  收藏 所屬分類: 我愛內存泄露

          主站蜘蛛池模板: 金阳县| 开平市| 龙山县| 璧山县| 临汾市| 榆树市| 澳门| 金昌市| 定南县| 达尔| 锡林郭勒盟| 阿克| 武强县| 锡林浩特市| 定南县| 长宁县| 中方县| 西乌| 遵义市| 莱芜市| 呼伦贝尔市| 衡山县| 鄂尔多斯市| 天镇县| 岑巩县| 华安县| 皋兰县| 樟树市| 弥勒县| 利津县| 锦屏县| 临西县| 许昌市| 门源| 寻乌县| 溆浦县| 鄢陵县| 永胜县| 元阳县| 伊宁县| 中宁县|