1. 程式人生 > >java PreparedStatement需要關閉,不然會記憶體溢位

java PreparedStatement需要關閉,不然會記憶體溢位

“第三方的資料庫連線池,使用的時候,獲取到Connection之後,使用完成,呼叫的關閉方法(close()) ,並沒有將Connection關閉,只是放回到連線池中,如果呼叫的這個方法,而沒有手動關閉PreparedStatement等,則這個PreparedStatement並沒有關閉,這樣會使得開發的程式記憶體急速增長,java的記憶體回收機制可能跟不上速度,最終造成Out of memory Error”
參考:http://blog.csdn.net/ghostgant/article/details/16860927、




錯誤的程式碼示例:


         con = dao.openBaseConnection() ;
            UUID id ;
            while( count < 10*10000){
                id = UUID.randomUUID() ;
                recordId = (id.getLeastSignificantBits()&0xfffffff)+"" ;
                PreparedStatement preStat = con.prepareStatement(sql) ;
                preStat.executeUpdate() ;
                 //forget to close the preStat
            }

com.mysql.jdbc.ConnectionImpl類
......
 private Map<Object, Object> cachedPreparedStatementParams;
.......

 PreparedStatement.ParseInfo pStmtInfo = (PreparedStatement.ParseInfo)this.cachedPreparedStatementParams.get(nativeSql);

.....


記憶體分析工具mat工具參考:http://blog.csdn.net/yxz329130952/article/details/50288145