-2
以下代码可能会泄漏JDK 7中的内存吗?JDK 7中字符串的内存泄漏
//size of input obj is around 15K
public save(List<DBObj> objs){
//added in new EDIT
if(objs ==null || objs.size == 0)
return;
if(objs.size()> 999) {
save(objs.sublist(0,999));
save(objs.sublist(999,objs.size())
}
//EDIT finish
StringBuffer sb = new StringBuffer();
sb.append(SOMEINSERTQUERYPREFIX)
for(DBObj obj : objs){
//add some prefix
sb.append(checkNULLforDBInsert(obj.getF1())).append(" , ");
sb.append(checkNULLforDBInsert(obj.getField2())).append(" , ");
sb.append(checkNULLforDBInsert(obj.getField3())).append(" , ");
//app sufix
}
}
private String checkNULLforDBInsert(String str)
{
if (str == null || str.toLowerCase().equals("null"))
{
return "null";
} else {
//suspecting this for leak ,Should a StringBuilder be used here too?
return "'" + str + "'";
}
}
为什么我认为它是一个泄漏
功能checkNULLforDBInsert追加报价每输入海峡。现在这个方法将被称为 对象中的15K * 12个字段。我认为这可能会产生泄漏,因为必须使用StringBuffer。
PLZ评论
为什么地球上会有内存泄漏? –
为什么不使用'PreparedStatement'? – fge
不,它会导致SQL注入。 – xehpuk