Weblogic的JSP问题解决方法
在做项目的时候 JSP在运行的时候出现了一些问题 现将我的问题解决方法做一个小结 供以后作项目的参考
问题
weblogic 的数据库连接数目在程序运行中不断增长 最后连接数目超过最大数 导致weblogic服务关闭
原因
在操作完数据库后 没有关闭数据库连接 或者是返回结果集(Resultset) 而无法在JSP中关闭数据库连接
解决方法
.在操作完数据库要关闭数据库连接
.尽量不要返回结果集Resultset 可以返回Vector(一个字段) Hashtable(多个字段) 这样可以在javabean中关闭数据库
.如果javabean中返回的是结果集(Resultset) 也可以在javaBean中写一个connectDB(连接数据库) closeDB(关闭数据库)的方法 然后jsp里面调用connectDB() 建立数据库连接 同时就可以对数据库进行操作了 操作数据库完毕 可以通过closeDB() 来关闭数据库
问题
在运行某一个JSP程序的时候 weblogic 的内存陡然增长 而且居高不下 最终导致weblogic 内存不足 甚至宕机
原因
过度使用内存
解决方法
.由于数据量比较大 在对字符串进行操作的时候 使用 + 进行字符串连接 而相信大家对String都非常熟悉 我们也经常要用它来做字符串的连接什么的 例如
String a =b+c file://b c 都是String
但是在实际的编译中却是这样
String a=new StringBuffer() append(b) append(c) toString()
显然 在一个简单的语句中却意外的多生成了 个对象
StringBuffer()
toString返回的一个String
我们比较一下这两段程序的性能
程序片断一
StringBuffer s=new StringBuffer();long start = System currentTimeMillis();for (int i= ;i< ;i++){s += a ;}long stop = System currentTimeMillis();System out println(stop start);
程序片断二
StringBuffer s=new StringBuffer( );//long start=System currentTimeMillis(); for (int i= ;i< ;i++){s append( a ); }long stop=System currentTimeMillis();System out println(stop start);
比较一下结果 差距很明显
至于为什么String的连接这么做 因为String无法直接改变其长度 而必须采用StringBuffer的用法
因此建议使用StringBuffer 的append 方法来进行字符串相连
lishixinzhi/Article/program/Java/hx/201311/26440