最近做Hadoop项目的自动化测试,代码要从hadoop mart里读数据出来,写到.csv文件里。有一个query结果集包含10万+条记录,且每条记录包含30+个列,于是jdbcTemplate华丽丽的内存溢出了。其实论数据量,这个真心不算大…
仔细看了看代码,大概知道了原因,结果集保存在List<Map<String, Object>>
这种结构中,而Map是比较消耗内存的,10万+个Map,每个Map30+对key-value…内存溢出是可以理解的
public List<Map<String, Object>> querySQL(final String query){
return jdbcTemplate.queryForList(query);
}
于是改用最原始的statement执行query,设置fetch szie,然后将result set存到List<List<String>>
中。每到2000行