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

          主站蜘蛛池模板: 库车县| 西丰县| 汶上县| 牟定县| 双桥区| 灯塔市| 石林| 抚顺市| 贞丰县| 彭阳县| 定日县| 永靖县| 宁夏| 常山县| 分宜县| 凌海市| 建宁县| 信丰县| 黔东| 资阳市| 淮安市| 寻甸| 清远市| 津南区| 鹤壁市| 普兰店市| 皋兰县| 衢州市| 小金县| 白沙| 大安市| 夏河县| 福安市| 云阳县| 临猗县| 建宁县| 宁波市| 湖州市| 霍州市| 姜堰市| 阿拉善左旗|