Tenho uma aplicação que preciso dar uma melhorada na sua peformance, ela não foi criada por mim, mas analisando o codigo vi ela tem um HashMap de BufferedWriter, que na aplicação em produção pode chegar a 6 milhões de BufferedWriter, gostaria de saber isso pode ser um dos motivos do impacto da lentidao da aplicação.
Abaixo segue um trechko do codigo
final HashMap<String, BufferedWriter> fwh = new HashMap<String, BufferedWriter>();
//*********************************************************************
// <CODIGO OMITIDIO>
//*********************************************************************
while (rs.next())
{
fw = getFileWriter(fwh, now, cfg, splitter, rs); //codigo deste metodo mostrado abaixo
final StringBuilder sb = new StringBuilder();
for (i = 1; i <= columns; i++)
{
colummValue = rs.getString(i);
if (colummValue == null || colummValue.toLowerCase().equals("null")) {
colummValue = "";
}
sb.append(colummValue);
sb.append(separator);
}
sb.setLength(sb.length() - 1);
final String line = sb.toString();
fw.write(line);
fw.newLine();
}
Metodo do getSplitterFileWriter
protected BufferedWriter getFileWriter(
final HashMap<String, BufferedWriter> fwh, final Calendar now,
final ReceiverConfiguration cfg, final String splitter,
final ResultSet rs) throws IOException, SQLException
{
String fn = null;
//*************************************************************************
// <codigo omitido>
//*************************************************************************
BufferedWriter fw = fwh.get(fn);
if (fw == null)
{
final boolean exportMeta = cfg.getExporterFileMeta(this);
fw = new BufferedWriter(new FileWriter(fn));
logger.info("Exporter opening [" + fn + "](metadata=" + exportMeta
+ ")");
if (exportMeta)
{
final ResultSetMetaData meta = rs.getMetaData();
final StringBuilder sb = new StringBuilder();
//*********************************************************************
// <CODIGO OMITIDIO>
//*********************************************************************
fw.write(sb.toString());
fw.newLine();
}
fwh.put(fn, fw);
return fw;
}
return fw;
}