JDBC结果集/语句中的Java内存泄漏



我有一个自写的迷你库,该库应该使用反射和注释与MySQL DB一起使用。由于某种原因,使用其代码的应用程序具有内存泄漏问题。当我对其进行介绍时,它通过char阵列检测到了巨大的内存消耗。谁能解释我怎么了?(该函数导致内存泄漏的代码之一)

public List select(Class clazz, String condition, Object... values) throws Exception{
    Table tbl = (Table) clazz.getAnnotation(Table.class);
    if(tbl==null) throw new Exception("Specified class doesnt contain table information");
    StringBuilder strb = new StringBuilder().append("SELECT * FROM `");
    strb.append(prefix).append(tbl.name());
    strb.append("` WHERE ");
    strb.append(condition);
    PreparedStatement stmt = con.prepareStatement(strb.toString());
    for (int i = 0; i < values.length; i++) {
        stmt.setObject(i + 1, values[i]);
    }
    ResultSet rs = stmt.executeQuery();
    ArrayList result = new ArrayList<>();
    while(rs.next()){
        Object o = clazz.newInstance();
        for(Field f : clazz.getFields()){
            Table.Column col = f.getAnnotation(Table.Column.class);
            if(col!=null){
                if(!f.isAccessible())
                    f.setAccessible(true);
                f.set(o, rs.getObject(f.getName()));
            }
        }
        result.add(o);
    }
    return result;
}

预先感谢您。PS我没有使用此func返回的列表或列表中的元素

您必须关闭结果集和语句。

最新更新