现象:
早期版本的mysql的jdbc中,一旦sqlStatement.setQueryTimeOut设置了语句超时时间,则即使语句瞬间执行完,取消任务的CancelTask.cancel(),也只是打了标志,并没从内存释放,只有等待达到超时时间,才会真正释放cancelTask。
此种机制,导致一旦设置的超时时间过长,语句执行过多,则瞬间会积累太多的cacelTask对象,即使语句可以瞬间执行完毕,但也只有到达超时时间,才会释放。
解决方案:
用5.1.11以上版本的mysql JDBC.
http://dev.mysql.com/doc/relnotes/connector-j/en/news-5-1-11.html