java PreparedStatement需要關閉,不然會記憶體溢位
阿新 • • 發佈:2019-01-30
“第三方的資料庫連線池,使用的時候,獲取到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
參考: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